2015-07-08 4 views
0

Я видел несколько решений, но это не точные решения. У меня есть БД с результатами имя и название коллекции является метки, как показано ниже:Как получить все ключи в коллекции Mongodb?

db.marks.find(); 
{ "_id" : ObjectId("54f57522627af4bfdcf79764"), "name" : "John", "scroe1" : 23, "score2" : 21, "score5" : 12 } 
{ "_id" : ObjectId("54f5761a627af4bfdcf79765"), "name" : "Mike", "scroe2" : 22, "score3" : 20, "score4" : 22 } 
{ "_id" : ObjectId("559d0bc521cb2e056507c3e3"), "name" : "Bush", "score2" : 30 } 

Я попытался с

var doc=db.marks.findOne(); for (var key in doc) print(key); 

и я получил

_id 
name 
score1 
score2 
score5 

Но я хочу, чтобы все ключи в коллекции, как ниже:

_id, name, score1, score2, score3, score4, score5 

имя scroe1 оценка2 оценка3here

ответ

2

findOne вернет только первый найденный документ. Поскольку в первом документе, который вы указали, нет ключей с оценкой 3 и счетом 4, он не отображает их. Если вы хотите показать все ключи корневого уровня для всех документов, вам потребуется выполнить итерацию по всем документам в db.

var keys = []; 
db.marks.find().forEach(function(doc){ 
    for (var key in doc){ 
     if(keys.indexOf(key) < 0){ 
      keys.push(key); 
     } 
    } 
}); 

print(keys); 
+0

я уже решил эту проблему таким же образом. – learner

+0

Могу ли я получить список вложенных ключей, используя такой подход? –

+0

@AarohiKulkarni Вы могли бы, но вам нужно будет проверить тип значения doc [key], а если это объект, вы можете перебрать его с помощью другого вложенного для ... цикла. Если это массив, тогда вам нужно будет перебрать массив, проверив значение каждого массива, а если его объект, то перейдем к клавишам этого объекта. –

0

MongoDB find() команда имеет два аргумента Первый и второй запрос является проекции.

Нечто вроде db.collection.find(query,projection).

если документ db.myCol.find();, то он возвращает:

{ 
    { 
    _id:1 
    name: ''hello', 
    age: 23 
    }, { 
    _id:2 
    name: ''bollo', 
    age: 27 
    } 
} 

И db.myCol.find({},{_id:1}); возвращается:

1 
2 
+0

Это приведет только к возврату '_id' документов, а не всех ключей в документе. –

Смежные вопросы