用$和mongoose查询两个参数?

时间:2015-09-07 09:00:56

标签: mongodb mongoose

我有这样的用户模型:

  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();

我知道我的语法问题很小,它在哪里?

1 个答案:

答案 0 :(得分:3)

非常简单且记录良好。 $elemMatch运算符充当“查询本身”,它将“它的条件”应用于指定数组的成员:

var query = User.find({
    "myArmy.mySoldiers": {
        "$elemMatch": {
            "positioned": { "$ne": null },
            "soldierInfo._id": soldierId
        }
    }
});

因此,对于要匹配的文档,则$elemMatch下指定的条件必须存在且对“相同”数组元素有效。 “左”上的数组,“右”的参数。

其他“点符号”形式测试值与数组中的“某个元素”匹配,而不一定是相同的。