如何在 MongoDB 中找到特定的键?

How to find specific key in MongoDB?

我必须找到所有包含 "p396:branchCode" 作为键的文件 MongoDB.Value 没关系,可以 anything.I 尝试使用

{"p396:branchCode": new RegExp(".*")}

在 MongoVUE 中,但我什么也没找到。 我的数据库非常嵌套并且 branchCode 有超级键 "p396:checkTellersEApproveStatus"

听起来您想使用 $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 }
})

如果这些值实际上是 "all" 数字,并且您有一个预期的 "range",那么请改用 $gt and $lt 运算符。这允许使用字段上的 "index"。并且 "sparse" 索引在所有文档中都不存在会提高性能:

db.collection.find({
    "p396:checkTellersApproveStatus.p396:branchCode": {
        "$gt": 0, "$lt": 99999
    }
})

在所有情况下,这是父 "p396:checkTellersApproveStatus" 的 "child",因此您使用 "not notation" 访问 属性 的完整路径。

您的密钥嵌套在超级密钥下,因此您需要使用点运算符:

{"p396:checkTellersEApproveStatus.p396:branchCode": {$exists: true}}

这假设 p396:branchCode 总是在 p396:checkTellersEApproveStatus 之下。如果不是这种情况,您就会遇到问题,因为 MongoDB 不允许查询未知键。当可能的超级键数量很少时,您可以使用 $or 运算符查询所有超级键。如果不是,那么您唯一的选择就是将您的对象重构为数组。举个例子,这样的结构:

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"})