如何在 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"})
我必须找到所有包含 "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"})