匹配密钥名称并在Mongodb中显示文档?
现在我只想找到那些从/dev/开始的keys文档 我尝试了以下脚本:匹配密钥名称并在Mongodb中显示文档?,mongodb,key-value,Mongodb,Key Value,现在我只想找到那些从/dev/开始的keys文档 我尝试了以下脚本: Json Structure: "_id" : ObjectId("55d6cb28725f3019a5241781"), "Number" : { "value" : "1234567", }, "DeviceID" : { "value" : "01", } "type" : {
Json Structure:
"_id" : ObjectId("55d6cb28725f3019a5241781"),
"Number" : {
"value" : "1234567",
},
"DeviceID" : {
"value" : "01",
}
"type" : {
"value" : "ce06"}
MongoDB不是设计成这样动态查找密钥的;使用它来动态查找值要容易得多,因此您可以重新构造数据结构以允许:
“_id”:ObjectId(“55d6cb28725f3019a5241781”),
“数据”:[
{
“键”:“数字”,
“值”:“1234567”,
},
{
“密钥”:“设备ID”,
“值”:“01”,
},
{
“键”:“类型”,
“值”:“ce06”
}
]
然后,您可以像这样查询它:
"DeviceID" : {
"value" : "01",
db.LIVEDATA.aggregate([
{$match:{“ProductIMEIno.value”:“359983007488004”},
{$unwind:“$data”},
{$match:{“data.key”:/^dev/i}
]);
将返回如下结构的数据:
"DeviceID" : {
"value" : "01",
{
“_id”:ObjectId(“55d6cb28725f3019a5241781”),
“数据”:{
“密钥”:“设备ID”,
“值”:“01”
}
}
假设您有这样的数据收集:
"DeviceID" : {
"value" : "01",
您可以使用以下聚合:
[
{
"Number": {
"value": "1234567"
},
"DeviceID": {
"value": "01"
},
"DeviceID2": {
"value": "01",
"name": "abc123"
},
"type": {
"value": "ce06"
}
},
{
"Number": {
"value": "1234568"
},
"DeviceID": {
"value": "02"
},
"type": {
"value": "ce07"
}
}
]
结果将是:
db.collection.aggregate([
{
"$match": {}
},
{
"$addFields": {
"root_key_value_list": {
"$objectToArray": "$$ROOT"
}
}
},
{
"$unwind": "$root_key_value_list"
},
{
"$match": {
"root_key_value_list.k": {
"$regex": "^Dev"
}
}
},
{
"$group": {
"_id": "$_id",
"root_key_value_list": {
"$push": "$root_key_value_list"
}
}
},
{
"$project": {
"root": {
"$arrayToObject": "$root_key_value_list"
}
}
},
{
"$replaceRoot": {
"newRoot": "$root"
}
}
])
游乐场:
请正确描述它。您的意思是希望找到从/dev/开始的键,但我无法确定该/dev/在给定示例中的位置,以及您所谈论的键。然后你通过显示期望的输出又增加了一种味道,而我无法找出这个期望的输出到底是从哪里产生的。我正在讨论DeviceID。