我正在尝试使用多个嵌套对象查询User集合,并且我不确定如何正确使用投影运算符(例如$),因为它们似乎适用于数组而不是对象。
每个用户都有一个" booksRecords"对象,具有多个图书对象(例如hc_1_3,hc_1_4等)。每个图书对象都有一个名为currLevel的字段,我试图找到至少有一个图书对象的孩子,其中currLevel:' nursery'。
我试过了 User.find({' booksRecords。$。currLevel':' nursery'}),但这似乎不起作用,我想知道查询的正确方法是什么嵌套对象?
我检查了Querying nested in mongoDB,但它与我的情况不同,因为我查询了嵌套对象。
[
//first object
{
_id: "xxx",
booksRecords: {
hc_1_3: {
markedRead: false,
currLevel: "elementary"
},
hc_1_2: {
markedRead: false,
currLevel: "elementary"
}
}
},
//second object
{
_id: "xyz",
booksRecords: {
hc_1_3: {
markedRead: false,
currLevel: "elementary"
},
hc_1_2: {
markedRead: false,
currLevel: "nursery"
}
}
}
]
答案 0 :(得分:1)
$ projection仅适用于数组。 您需要使用$where来评估每个文档:
db.User.find( { $where: function() {
for (var i=0 in this.booksRecords) {
if (this.booksRecords[i].currLevel === 'nursery') {
return true;
}
}
return false;
} });
答案 1 :(得分:0)
var userList = db.User.find();
var booksRecordsList={};
while(userList.hasNext()){
var user = userList.next();
for(var key in user.booksRecords){
if ( !( key in booksRecordsList ) ) {
booksRecordsList[key] = key;
}
}
};
db.User.find().forEach(function(doc){
for (var booksRecord in booksRecordsList){
var booksRecordItem = doc.booksRecords[booksRecord];
if(booksRecordItem.currLevel == "nursery"){
print(tojson(doc));
}
}
});