具有对象数组的Mongo DB聚合 [英] Mongo DB aggregation with array of objects

查看:71
本文介绍了具有对象数组的Mongo DB聚合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的收集模式如下:

产品

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

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

Now I want to query on this with a generic filter. For example,

  1. 让我使用Name = value 1Category in [value 2, value 3]Department = value 3
  2. 获得所有产品
  3. 使用Name = value 1Category = value 2Department in [value 3, value 4]
  4. 给我所有产品
  1. Get me all product with Name = value 1 and Category in [value 2, value 3] and Department = value 3
  2. Get me all product with Name = value 1 or Category = value 2 or Department in [value 3, value 4]

我一直在尝试将$match$elemMatch一起使用.但这仅允许一个查询,但是我不能使用$and$or运算符.

I have been trying to use $match with $elemMatch. But that only allows only one query but I am not able to use the $and and $or operator.

推荐答案

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

You can use $elemMatch just fine, you just have to put $and / $or at the top level.

您的第一个示例是

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' }
      }
    }
  ]
})

这篇关于具有对象数组的Mongo DB聚合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆