具有对象数组的Mongo DB聚合

时间:2020-05-05 13:56:18

标签: mongodb mongoose mongodb-query

我的收集模式如下:

产品

{
  _id: ObjectId(), // default mongo db id
  specification: [
    {key: 'Name', value: "value 1"},
    {key: 'Category', value: "value 2"},
    {key: 'Department', value: "value 3"}
  ]
}

现在,我想使用通用过滤器对此进行查询。例如,

  1. Name = value 1Category in [value 2, value 3]Department = value 3买给我所有产品
  2. Name = value 1Category = value 2Department in [value 3, value 4]买给我所有产品

我一直在尝试将$match$elemMatch一起使用。但这仅允许一个查询,但我无法使用$and$or运算符。

1 个答案:

答案 0 :(得分:0)

您可以很好地使用$elemMatch,只需将$and / $or放在顶层。

您的第一个例子是

db.products.find({
  $and: [
    { 
      specification: {
        $elemMatch: { key: 'Name', value: 'value 1' }
      }
    },
    {
      specification: {
        $elemMatch: { key: 'Category', value: { $in: ['value 1', 'value 2'] } }
      }
    },
    { 
      specification: {
        $elemMatch: { key: 'Department', value: 'value 3' }
      }
    }
  ]
})