从mongodb中的一个对象数组中检索多个对象

时间:2016-01-29 18:49:51

标签: arrays mongodb mongodb-query

我使用mongodb将我的用户数据与数组一起保存。 我的问题是如何检索与该用户数组中给定值匹配的多个对象。如下所示:

{ 
    _id: { objid:'0000000000000' },
    userId: 'abc',
    userItems : [
        {
            itemName: 'mango',
            date: 24,
            month: 1,
            year: 2016
        },
        {
            itemName: 'apple',
            date: 24,
            month: 1,
            year: 2016
        },
        {
            itemName: 'orange',
            date: 22,
            month: 1,
            year: 2016
        },
        {
            itemName: 'vanilla',
            date: 23,
            month: 1,
            year: 2016
        }
    ]
}

并且预期结果是

{
    _id: { objid: '0000000000000' },
    userId: 'abc',
    userItems: [
        {
            itemName: 'mango',
            date: 24,
            month: 1,
            year: 2016
        },
        {
            itemName: 'apple',
            date: 24,
            month: 1,
            year: 2016
        }
    ]
}

我想要从这个userId userItems数组中匹配日期,月份和年份的所有元素请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

我们可以通过聚合框架找到结果。

db.user.aggregate(
   {
     $unwind : "$userItems" 
   },
   {
      $match: {
        "userItems.date" : 24, 
        "userItems.month" : 1, 
        "userItems.year" : 2016
      }
   },
   {
      $group: {
         "_id" : { "id":"$_id","userId":"$userId"},
         "userItems" : {$push:"$userItems"}
      }
   },
   {
       $project:{
          "_id": "$_id.id", 
          "userId": "$_id.userId",
          "userItems": 1 
       }
   }
)

答案 1 :(得分:0)

db.collectioName.find(
   {
      nameOfArrayYouarelookingIn: {
         $elemMatch: {
            ArrayFieldOneName: 1,
            ArrayFieldTwoName: 'blahblah'
         }
      }
   }
)

有关详细信息和示例,请参阅$elemMatch documentation