2017-03-28 27 views
-1
Json Structure: 
    "_id" : ObjectId("55d6cb28725f3019a5241781"), 
     "Number" : { 
      "value" : "1234567", 
     }, 
     "DeviceID" : { 
      "value" : "01", 
     } 
     "type" : { 
      "value" : "ce06"} 

現在我只想找到那些從/ dev /開始的密鑰文件。在Mongodb中匹配鍵名和顯示文檔?

我想這個腳本:

var cur = db.LIVEDATA.find({"ProductIMEIno.value":"359983007488004"}); 
    cur.forEach(function(doc){ 
    var keynames = Object.keys(doc); 
    print('the length is '+keynames.length); 
    for(var i=0;i<keynames.length;i++){ 
    if(keynames[i].match(/Dev/)){ 
    print("the name is "+keynames); }}}) 

但這不能正常工作。

希望的輸出; 只有這個文件應該顯示在關鍵名稱搜索的基礎上。

"DeviceID" : { 
       "value" : "01", 
+0

請正確描述。你說你想要找到從/ dev /開始的密鑰,而且我無法弄清楚你給出的例子中/ dev /的位置以及你正在談論的密鑰。然後你通過顯示所需的輸出增加了一種風味,並且我無法從這個希望的輸出產生的地方找到。 –

+0

我正在考慮DeviceID。 –

回答

0

MongoDB是不是爲了找到動態像這樣;它更容易使用它來尋找動態,所以你可以調整你的數據結構,允許這樣的:

"_id" : ObjectId("55d6cb28725f3019a5241781"), 
"data" : [ 
    { 
     "key" : "Number", 
     "value" : "1234567", 
    }, 
    { 
     "key": "DeviceID", 
     "value" : "01", 
    }, 
    { 
     "key" : "type", 
     "value" : "ce06" 
    } 
] 

然後你就可以查詢它是這樣的:

db.LIVEDATA.aggregate([ 
    {$match: {"ProductIMEIno.value":"359983007488004"}}, 
    {$unwind: "$data"}, 
    {$match: {"data.key" : /^dev/i }} 
]); 

那將返回如下結構數據:

{ 
    "_id" : ObjectId("55d6cb28725f3019a5241781"), 
    "data" : { 
    "key" : "DeviceID", 
    "value" : "01" 
    } 
} 
相關問題