【问题标题】:Mongo DB aggregation with array of objects带有对象数组的MongoDB聚合
【发布时间】:2020-08-20 05:10:24
【问题描述】:

我的收藏架构如下:

产品

{
  _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 和类别在 [值 2,值 3] 和部门 = 值 3 的产品,另一个用于获取我所有名称 = 值 1 或类别 = 值 2 或部门在 [值 3,值 4]

标签: mongodb mongoose mongodb-query


【解决方案1】:

您可以使用$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' }
      }
    }
  ]
})

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2017-07-14
    • 2020-07-27
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多