如何计算嵌入式MongoDB的文档键
问题描述:
我有一个MongoDB的查询号码:(给我的设置,其中帐户=“测试”)如何计算嵌入式MongoDB的文档键
db.collection_name.find({"account" : "test1"}, {settings : 1}).pretty();
在那里我得到下面的示例输出:
{
"_id" : ObjectId("49830ede4bz08bc0b495f123"),
"settings" : {
"clusterData" : {
"us-south-1" : "cluster1",
"us-east-1" : "cluster2"
},
},
我现在要找的是给我clusterData
有1个以上键的帐号。
我只想列出这些帐户(2)或更多的密钥。
我已经试过这样:(但这不起作用)
db.collection_name.find({'settings.clusterData.1': {$exists: true}}, {account : 1}).pretty();
这是可以做到与当前的数据结构?我没有选择重新设计这个模式。
答
你的clusterData
字段不是一个数组,这就是为什么你不能只过滤它的元素数量。然而,有一种方法可以通过聚合框架来获得你想要的东西。试试这个:
db.collection_name.aggregate({
$match: {
"account" : "test1"
}
}, {
$project: {
"settingsAsArraySize": { $size: { $objectToArray: "$settings.clusterData" } },
"settings.clusterData": 1
}
}, {
$match: {
"settingsAsArraySize": { $gt: 1 }
}
}, {
$project: {
"_id": 0,
"settings.clusterData": 1
}
}).pretty();
你看过https://*.com/questions/7811163/query-for-documents-where-array-size-is-greater-than-1? – jeanr