Mongodb从数组中的对象的一部分查询

时间:2013-06-26 05:49:43

标签: node.js mongodb

这是我正在尝试查询的示例文档

{
   "_id":"asdf0-002f-42d6-b111-ade91df09249",
   "user":[
      {
         "_id":"14bfgdsfg0-3708-46ee-8164-7ee1d029a507",
         "n":"aaa"
      },
      {
         "_id":"aasdfa89-5cfe-4861-8a9a-f77428158ca9",
         "n":"bbb"
      }
   ]
}

该文档有2个用户引用,包含用户_id和其他misc信息。我有2个用户ID,我试图只通过用户ID获取此文档。我也不知道2 ids的顺序。这是一个可能的查询吗?

col.findOne({
   user:{
      $all:[
         {
            _id:"14bfgdsfg0-3708-46ee-8164-7ee1d029a507"
         },
         {
            _id:"aasdfa89-5cfe-4861-8a9a-f77428158ca9"
         }
      ]
   }
})

^^我尝试过的东西不起作用。

2 个答案:

答案 0 :(得分:1)

ElemMatch应该可以做到这一点。

col.findOne({user:{$ elemMatch:{“_ id”:“14bfgdsfg0-3708-46ee-8164-7ee1d029a507”,“_ id”:“aasdfa89-5cfe-4861-8a9a-f77428158ca9”}}})

答案 1 :(得分:1)

你接近你的全部尝试。

col.findOne({
   "user._id":{
       $all : [ "14bfgdsfg0-3708-46ee-8164-7ee1d029a507", 
            "aasdfa89-5cfe-4861-8a9a-f77428158ca9" ]

   }
}

您可以通过包装引号来查询子文档。从那里,$ all与你正在寻找的价值观有效。

Mongodb find a document with all subdocuments satisfying a condition显示了此类查询的变体。