2016-06-17 29 views
2

我一直在努力過濾我的記錄ID從MongoDB沒有成功。問題是與$ OID來自MLab的MongoDB:通過ID找不到工作

MLAB我的記錄是這樣的:

{ 
    "_id": { 
     "$oid": "57603891dcba0f7813102b3f" 
    }, 
    "age": 10, 
    "name": "john", 
    "answer": "3", 
} 

腳本爲:

 mycollection.find({_id:"57603891dcba0f7813102b3f"},{},{},function(err, docs) { 
    console.log("record"+docs); 
    docs.each(function(err, doc) { 
     if(doc) { 
     console.log("record"+doc); 
     } 
    }); 
    }); 

有什麼不對呢?任何想法傢伙?

回答

0

嘗試以下操作: -

mycollection.find({"_id.$oid":"57603891dcba0f7813102b3f"},{},{},function(err, docs) { 
console.log("record"+docs); 
docs.each(function(err, doc) { 
    if(doc) { 
    console.log("record"+doc); 
    } 
}); 
    }); 
+0

仍然不能與MLab連接 –

6

與你的腳本的問題是,你想如果你正在使用Node.js的一個正常的字符串"57603891dcba0f7813102b3f"比較用的ObjectId串

{ 
     "$oid": "57603891dcba0f7813102b3f" 
}, 

,這裏是你可以做什麼

1)從MongoDB包中導入ObjectId api

var ObjectId = require('mongodb').ObjectID; 

2)轉換正常字符串的ObjectId在查詢

mycollection.find({_id:ObjectId("57603891dcba0f7813102b3f")},{},{},function(err, docs) {...} 

順便說一句,通過@發佈titi23答案也適用。但是我發現ObjectId轉換是一個更清潔的方法。

+0

這適用於我當地的mongoDb安裝,但不適用於MLab連接。我仍然有一個空作爲返回值... –

+0

你可以分享您的樣本數據mLab實例嗎? –

+0

樣本文件是我自己對這個問題表示:{ 「_id」:{ 「$ OID」: 「57603891dcba0f7813102b3f」 }, 「時代」:10, 「名」: 「約翰」, 「答案「:」3「, }。插入到mlab中的任何新文檔正在使用$ oid進行格式化。 –

1

您可以用這種方式在mLab上搜索。

{ 
    "_id": { 
     "$oid": "59b59b34852a9619b486634f" 
    } 
} 

但你的JavaScript代碼應該是,

uId = ObjectId("59b59b34852a9619b486634f") 
User.findOne({"_id": uId}, function(err, user){ 
}); 
0

在本地開發的MongoDB服務器,在 「_id」 被索引並確定使用對象ID( 「......」)。 例如,在本地查詢時,你可能會得到

{ "_id": ObjectID("....") , "name": ".......", "password" : "............"} 

而在MLAB或遠程服務器的MongoDB查詢,該「_id」爲「$ OID」引用。例如,

{ "_id": { "$oid": "..........."} , "name": "......."} 

如果你像我一樣,你可以嘗試在MLAB編輯文檔的「_id」,並與後者取代前者描述,MLAB不會允許你做這樣的,我認爲這是部分限制。試試看看是否有任何解決方法可以共享。