我试图在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个键,即(test, output),你知道怎么做吗?
注意:它应该同时满足两个条件,两个键必须等于$in操作符中的对象,所以我认为$或operator不起作用。
提供的匹配阶段正在查找包含名为test_and_output
的字段的文档,因为示例文档都没有这样的字段,因此没有任何匹配。
如果需要同时匹配多个条件,请使用顶级$or
和过滤器数组,如:
{$match:{
$or: [
{ test: 'test01', output: 0 },
{ test: 'test03', output: 1 }
]
}}
游乐场
如果示例数据是来自单个文档的数组,例如:
{
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}
]
}}
}
游乐场