我有这样的用户模型:
user : {
myArmy : {
mySoldiers : [
{
positioned : false,
soldierInfo : {
_id : s99212
}
},
{
positioned : true,
soldierInfo : {
_id : s99112
}
}
]
}
},
user : {
myArmy : {
mySoldiers : [
{
positioned : true,
soldierInfo : {
_id : s99212
}
},
{
positioned : false,
soldierInfo : {
_id : s99112
}
}
]
}
}
...
我有一个查询,我想做的是返回有士兵身份s99212定位的用户(真):(可能是成千上万的人,我需要阅读并检索所有这些)
这是我用mongoose的错误查询:
var soldierId = s99212;
stream = User.find({
$and: [
{'myArmy.mySoldier.positioned': {$ne: null}},
{'myArmy.mySoldier.soldierInfo._id': soldierId}
]
}).lean(true).stream();
此查询没有返回任何内容,是否有另外一种方法可以执行此操作$和东西?
我想如何使用$ elemMatch,是否应该使用它而不是查找? (如果值得一提,我想返回完整的用户对象,而不仅仅是它的一部分......)
试过这个,撞坏了我的应用程序:
stream = User.find({
'$elemMatch': [
{'myArmy.mySoldiers.pos': {$ne: null}},
{'myArmy.mySoldiers.soldierInfo._id': soldierId}
]
}).lean(true).stream();
我知道我的语法问题很小,它在哪里?
答案 0 :(得分:3)
非常简单且记录良好。 $elemMatch
运算符充当“查询本身”,它将“它的条件”应用于指定数组的成员:
var query = User.find({
"myArmy.mySoldiers": {
"$elemMatch": {
"positioned": { "$ne": null },
"soldierInfo._id": soldierId
}
}
});
因此,对于要匹配的文档,则$elemMatch
下指定的条件必须存在且对“相同”数组元素有效。 “左”上的数组,“右”的参数。
其他“点符号”形式仅测试值与数组中的“某个元素”匹配,而不一定是相同的。