MongoDB嵌套数组查找和投影

时间:2015-11-12 19:42:04

标签: mongodb mongoose database nosql

我目前正在使用 mongodb mongoose )。我的一个示例文档是:

myuser{
  _id: 7777...,
  money: 1000,
  ships:[{
    _id: 7777...
    name: "myshipname",
    products:[{
      product_id: 7777....,
      quantity: 24
    }]
  }
}

我的目标是获得某个产品给定的用户ID,发货时间ID和产品ID,结果如下:{ product_id: 777..,quantity:24}

到目前为止,我找到了某个用户发货地点:

findOne(userId,ships:{ $elemMatch: {_id:shipId}})

使用userId从用户返回数组 ship 中shipId的船舶信息。但是,我找不到从该船只获得某种产品的方法

1 个答案:

答案 0 :(得分:1)

您最想要的是使用聚合框架。类似的东西:

db.users.aggregate([
  {$match: { _id : <user>}},
  {$unwind: "$ships"},
  {$unwind: "$ships.products"},
  {$match: { "ships._id": <ship>}},
  {$match: { "ships.products.product_id": <product>}}
]);

注意我现在不在使用mongo的计算机上,所以我的语法可能有些偏差。