Как просмотреть поля документа в оболочке mongo?

Есть ли способ определить поля/ключи в документе во время оболочки mongo? В качестве примера предположим, что у нас есть документ вроде (псевдокод):

{
    "message": "Hello, world",
    "from": "hal",
    "field": 123
}

Я хотел бы запустить команду в оболочке, которая возвращает список полей/ключей в этом документе. Например, что-то вроде этого:

> var message = db.messages.findOne()
> message.keys()
... prints out "message, from, field"

Спасибо!

Ответы

Ответ 1

Еще проще:

Object.keys(db.messages.findOne())

Ответ 2

A for ... in цикл должен сделать трюк:

> var message = db.messages.findOne();
> for (var key in message) {
... print(key);
... }

Ответ 3

Другие ответы верны.

Однако, поскольку я совершенно новый, я не понимаю, где и как должны выполняться вышеуказанные команды:

Ниже помогло, из моего github
Запустите ниже в командной строке (cmd для Windows):

// ------------
// start mongo client
mongo

// ------------

// list all databases
show dbs
// NOTE: assume one of the databases is myNewDatabase

// use the 'myNewDatabase' database
use myNewDatabase

// ------------

// show all collections of 'myNewDatabase' database
show collections
// NOTE: assume one of the collections is 'myCollection'

// show all documents of 'myCollection' collection
db.myCollection.find()

// ------------

// field keys
Object.keys(db.myCollection.findOne());

// values
db.myCollection.find().forEach(function(doc) {
    for (field in doc) {
        print(doc[field]);
    }
});

// ------------

Ответ 4

Чтобы получить список всех полей, используемых в коллекции в MongoDB, так я нашел наиболее простым (ваш пробег может меняться:)):

Создайте файл .js с содержимым:

use yourdbname
mr = db.runCommand({
  "mapreduce" : "collectionName",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; },
  "out": "collectionName" + "_keys"
})
db[mr.result].distinct("_id")

Я узнал, как это сделать здесь (блог GeoffTech)

Я запустил его из оболочки, чтобы распечатать вывод в консоли

mongo < nameOfYourFile.js 

или выгрузите вывод в текстовом файле:

mongo < nameOfYourFile.js > outputDir\nameOfYourOutputFile.txt

Я абсолютно не знаком с MongoDb, поэтому надеюсь, что он действительно получит все поля независимо от использования в документах!

(Я использую MongoDb в Windows 10, поэтому моя консоль может отличаться от вашей)