匹配密钥名称并在Mongodb中显示文档?

匹配密钥名称并在Mongodb中显示文档?,mongodb,key-value,Mongodb,Key Value,现在我只想找到那些从/dev/开始的keys文档 我尝试了以下脚本: Json Structure: "_id" : ObjectId("55d6cb28725f3019a5241781"), "Number" : { "value" : "1234567", }, "DeviceID" : { "value" : "01", } "type" : {

现在我只想找到那些从/dev/开始的keys文档

我尝试了以下脚本:

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。