Mongo DB aggregation with array of objects

删除回忆录丶 提交于 2020-05-17 07:42:10

问题


My collection schema is as follows:

Product

{
  _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. 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]

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.


回答1:


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

Your first example would be

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


来源:https://stackoverflow.com/questions/61614866/mongo-db-aggregation-with-array-of-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!