使用 MongoDB/Mongoose,考虑我的 test
集合具有以下 2 个文档:
"_id" : ObjectId("5c4e3cef9cd12904cfc7ecc0"),
"name" : "REGISTER1",
"properties" : [
{
"property” : "PROP1",
"value" : "GREEN"
},
{
"property” : "PROP2",
"value" : "RED"
}
]
和
"_id" : ObjectId("5c4e3cef9cd12904cfc7ecc0"),
"name" : "REGISTER2",
"properties" : [
{
"property" : "PROP2",
"value" : "RED"
},
{
"property" : "PROP1",
"value" : "GREEN"
}
]
我使用以下命令来查找寄存器:
db.tests.find(
{ properties: [
{
"property" : "PROP2",
"value" : "RED"
},
{
"property" : "PROP1",
"value" : "GREEN"
}
]
}).pretty();
返回REGISTER2
,而不是REGISTER1
。
同样的方法:
db.tests.find(
{ properties: [
{
"property" : "PROP1",
"value" : "GREEN"
},
{
"property" : "PROP2",
"value" : "RED"
}
]
}).pretty();
返回REGISTER1
,而不是REGISTER2
。
我需要两个查询都返回元素“REGISTER1”和“REGISTER2”,因为它们之间唯一的变化是属性顺序(数组顺序)。
如何查询以返回 REGISTER1
和 REGISTER2
,无论查询元素的数组顺序如何?
最佳答案
您可以使用$all
查询此内容:
db.tests.find({
properties: {$all: [
{property: 'PROP1', value: 'GREEN'},
{property: 'PROP2', value: 'RED'}
]}})
$all
的两个元素都必须存在才能使文档匹配,但顺序无关。
对于 properties
元素除了您要匹配的内容之外还包含更多键的情况,您可以使用 $elemMatch
:
db.tests.find({
properties: {$all: [
{$elemMatch: {property: 'PROP1', value: 'GREEN'}},
{$elemMatch: {property: 'PROP2', value: 'RED'}}
]}})
$elemMatch
确保每个属性
/值
元组匹配相同的元素。
关于mongodb - Mongoose 查询匹配数组的文档,无论其元素顺序如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54393914/