3

我有一个如下的集合:-

{
  _id: 5,
  "org_name": "abc",
  "items": [
    {
      "item_id": "10",
      "data": [
        // Values goes here
      ]
    },
    {
      "item_id": "11",
      "data": [
        // Values goes here
      ]
    }
  ]
},

// Another sub document
{
  _id: 6,
  "org_name": "sony",
  "items": [
    {
      "item_id": "10",
      "data": [
        // Values goes here
      ]
    },
    {
      "item_id": "11",
      "data": [
        // Values goes here
      ]
    }
  ]
}

每个子文档对应于各个组织,每个组织中都有一个arrayof items

我需要的是从items数组中选择单个元素,通过提供item_id.

我已经尝试过了:-

db.organizations.find({"_id": 5}, {items: {$elemMatch: {"item_id": {$in: ["10", "11"]}}}})

但它会返回带有 *item_id* "10"OR的项目列表和带有 *item_id* "11" 的项目列表。

我需要的是为组织“abc”获取 item_id 10 和 11 的值。请帮忙。

4

1 回答 1

7

更新2

db.organizations.aggregate([
    // you can remove this to return all your data
    {$match:{_id:5}},
    // unwind array of items
    {$unwind:"$items"},
    // filter out all items not in 10, 11
    {$match:{"items.item_id":{"$in":["10", "11"]}}},
    // aggregate again into array
    {$group:{_id:"$_id", "items":{$push:"$items"}}}
])

更新

db.organizations.find({
    "_id": 5,
    items: {$elemMatch: {"item_id": {$in: ["10", "11"]}}}
})

old看起来您需要聚合框架,尤其是$unwind运算符:

db.organizations.aggregate([
    {$match:{_id:5}}, // you can remove this to return all your data
    {$unwind:"$items"}
])
于 2013-08-31T08:44:02.553 回答