我必须在 MongoDB 中找到所有包含“p396:branchCode”作为键的文档。值无关紧要,可以是任何东西。我尝试使用
{"p396:branchCode": new RegExp(".*")}
在 MongoVUE 但我什么也没找到。我的数据库非常嵌套,branchCode 具有超级键“p396:checkTellersEApproveStatus”
您的密钥嵌套在超级密钥下,因此您需要使用点运算符:
{"p396:checkTellersEApproveStatus.p396:branchCode": {$exists: true}}
这假设p396:branchCode
总是在p396:checkTellersEApproveStatus
. 如果不是这种情况,您就会遇到问题,因为 MongoDB 不允许对未知键进行查询。当可能的超级键数量较少时,您可以使用 $or-operator 查询所有超级键。如果没有,那么您唯一的选择是将对象重构为数组。举个例子,这样的结构:
properties: {
prop1: "value1",
prop2: "value2",
prop3: "value3"
}
当看起来像这样时,查询任意键下的值会容易得多:
properties: [
{ key: "prop1", value:"value1"} ,
{ key: "prop2", value:"value2"},
{ key: "prop3", value:"value3"}
]
因为你可以做db.collection.find({"properties.value":"value2"})
听起来你想使用$exists
运算符。
{'p396:branchCode': {$exists: true}}
这假设此查询是路径的一部分:
{ 'p396:checkTellersApproveStatus': {'p396:branchCode': {$exists: true}}}
可以缩短为:
{ 'p396:checkTellersApproveStatus.p396:branchCode': {$exists: true}}
如果您实际上是“混合类型,那么这可能不是一件好事。但是如果您只关心该字段$exists
,那么这就是要使用的运算符:
db.collection.find({
"p396:checkTellersApproveStatus.p396:branchCode": { "$exists": true }
})
如果这些值实际上是“所有”数字并且您有预期的“范围”,那么请改用$gt
和$lt
运算符。这允许使用字段上的“索引”。所有文档中都不存在的“稀疏”索引将提高性能:
db.collection.find({
"p396:checkTellersApproveStatus.p396:branchCode": {
"$gt": 0, "$lt": 99999
}
})
在所有情况下,这是父“p396:checkTellersApproveStatus”的“子”,因此您使用“not notation”来访问属性的完整路径。