MongoDB通过数组中对象的多个键查询$in运算符?

58wvjzkj  于 2023-01-16  发布在  Go
关注(0)|答案(1)|浏览(169)

我尝试使用$in操作符$match查询MongoDB,如下所示:-
收集的文件应具有类似的数据,如下所示:-

[
  {
    "test": "test01",
    "output": 0
  },
  {
    "test": "test02",
    "output": 5
  },
  {
    "test": "test03",
    "output": 1
  }
]

我尝试通过执行以下操作来使用此聚合:

await SampleCollection.aggregate(
  [
    {
      $match: {
        // here it should look for test and output key
        test_and_output: { $in: [{ test: 'test01', output: 0 }, { test: 'test03', output: 1 }] },
      },
    },
  ],
  async function (err, data) {
    if (err) return reject(err);
    if (!data || !data.length) return resolve(null);
    if (data.length) return resolve(data);
  }
);

正如你可以看到上面我尝试使用$in操作符来寻找2个关键字是(测试,输出),任何想法如何?
注意:-它应该同时满足2个条件,2个键必须等于$中的对象,所以我认为$或运算符不起作用。

gojuced7

gojuced71#

提供的匹配阶段查找包含名为test_and_output的字段的文档,因为没有一个示例文档包含这样的字段,所以没有匹配。
如果您需要同时匹配多个条件,请使用带有过滤器数组的顶级$or,如下所示:

{$match:{
   $or: [
         { test: 'test01', output: 0 }, 
         { test: 'test03', output: 1 }
        ]
}}

Playground
如果示例数据是来自单个文档数组,如:

{
   test_and_order: [
     {
       "test": "test01",
       "output": 0
     },
     {
       "test": "test02",
       "output": 5
     },
     {
       "test": "test03",
       "output": 1
     }
  ]
}

您可以像这样使用$elemMatch

$match: {
    test_and_output: {$elemMatch: {
        $or: [
          {test: "test01", output: 0},
          {test: "test03", output: 1}
        ]
    }}
}

Playground

相关问题