Как получить все ключи в коллекции 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 оценка3 здесь
2 ответа
findOne вернет только первый найденный документ. Так как первый список, который вы перечисляете, не имеет ключей Score3 и Score4, он не будет отображать их. Если вы хотите показать все ключи корневого уровня во всех документах, вам нужно будет выполнить итерацию по всем документам в БД.
var keys = [];
db.marks.find().forEach(function(doc){
for (var key in doc){
if(keys.indexOf(key) < 0){
keys.push(key);
}
}
});
print(keys);
mr = db.runCommand({
"mapreduce" : "my_collection",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) { return null; },
"out": "my_collection" + "_keys"
})
Затем запустите отличную от полученной коллекции, чтобы найти все ключи:
db[mr.result].distinct("_id")
["foo", "bar", "baz", "_id", ...]
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