根据嵌套对象字段的长度查找所有文档
Find all document based on length of nested object field
我有以下文件:
{
usera:{
data: {
order1: "data",
order2: "data2",
order3: "data3",
}
},
userb:{
data: {
order1: "data",
order2: "data2",
}
},
userc:{
data: {
order1: "data",
order3: "data3",
}
},
userd:{
data: {
order1: "data",
order2: "data2",
order3: "data3",
}
},
usere:{
data: {
order1: "data"
}
}
}
我想查询只有 order1
没有其他 order2
或其他文档可用的文档。
例如,只有 usere
是一个包含 order1 而其他不存在的文档。
无论如何,我可以在哪里检查我的 data
字段的长度,如果它是 1 并且 order1
$exists
是 true
我想下面的代码就是你要找的
db.collection.aggregate([
{
"$match": {
"$expr": {
"$eq": [
{
"$let": {
"vars": {
"orderElem": {
"$objectToArray": "$user.data"
},
},
"in": "$$orderElem.k"
},
},
[
"order1"
],
],
}
},
}
])
我有以下文件:
{
usera:{
data: {
order1: "data",
order2: "data2",
order3: "data3",
}
},
userb:{
data: {
order1: "data",
order2: "data2",
}
},
userc:{
data: {
order1: "data",
order3: "data3",
}
},
userd:{
data: {
order1: "data",
order2: "data2",
order3: "data3",
}
},
usere:{
data: {
order1: "data"
}
}
}
我想查询只有 order1
没有其他 order2
或其他文档可用的文档。
例如,只有 usere
是一个包含 order1 而其他不存在的文档。
无论如何,我可以在哪里检查我的 data
字段的长度,如果它是 1 并且 order1
$exists
是 true
我想下面的代码就是你要找的
db.collection.aggregate([
{
"$match": {
"$expr": {
"$eq": [
{
"$let": {
"vars": {
"orderElem": {
"$objectToArray": "$user.data"
},
},
"in": "$$orderElem.k"
},
},
[
"order1"
],
],
}
},
}
])