2011-11-22 97 views
149

我發現這個問題的答案是C#和Perl,但不是在本機界面。我認爲這會工作:如何在控制檯中通過其ObjectId搜索對象?

db.theColl.find({ _id: ObjectId("4ecbe7f9e8c1c9092c000027") })

查詢返回任何結果。我通過執行db.theColl.find()找到了4ecbe7f9e8c1c9092c000027並抓取了一個ObjectId。該集合中有幾千個對象。

我讀過了我在mongodb.org網站上找到的所有網頁,但沒有找到它。這只是一個奇怪的事情嗎?對我來說這似乎很正常。

回答

235

一點都不奇怪,人們總是這樣做。確保集合名稱正確(大小寫很重要)並且ObjectId是確切的。

文檔是here

> db.test.insert({x: 1}) 

> db.test.find()            // no criteria 
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }  

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit 
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } 

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))   // shortcut 
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } 
+1

奇怪,我重新啓動我的控制檯,它突然工作。有什麼方法可以在命令行上改變你的「範圍」或其他東西,而不是真的知道它嗎? – jcollum

+0

難怪:當我尋找頁面沒有出現的'find ObjectID'時:http://www.mongodb.org/dosearchsite.action?queryString=find+ObjectId&where=DOCS – jcollum

+0

是的,你可能會意外地鍵入「使用dbname「和切換數據庫。我假設你沒有使用複製或分片,這顯然會產生其他可能性,爲什麼它沒有出現。 –

56

更容易,尤其是片完成:

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c')) 

編輯:也可與用於漂亮輸出findOne命令。

+0

如果我們想用多個對象Ids進行搜索,就像我們在mysql中實現WHERE IN條件一樣。 – Pratswinz

+0

這給我一個錯誤:TypeError:過濾器必須是dict,bson.son.SON或其他繼承自collections的類型的實例。映射 –

+1

@DavidOkwii - 此示例用於MongoShell。它看起來像你從Python運行,在這種情況下,你會想做一些事情:'db.test.find({'_ id':ObjectId('4ecc05e55dd98a436ddcc47c')})' – MPlanchard

10

您錯過了插入雙引號。 準確的查詢是

db.theColl.find({ "_id": ObjectId("4ecbe7f9e8c1c9092c000027") }) 
+0

「問題是,我wasn不要在我的_id上加引號。「 - 2011年12月7日,請參閱第一個回答的評論 – jcollum

+0

@jcollum作爲更新,您現在放置的查詢將在_id附近沒有引號的情況下有效。 – AnimalTesting

43

如果您使用的Node.js:

> var ObjectId = require('mongodb').ObjectId; 
> var id = req.params.gonderi_id;  
> var o_id = new ObjectId(id); 
> db.test.find({_id:o_id}) 

編輯:更正爲新的ObjectId(ID),而不是新的對象ID(ID)

+1

一直在受這一個! tx –

-3

根本就:

db.getCollection('test').find('4ecbe7f9e8c1c9092c000027'); 
+0

這不適用於'Mongo Shell' 3.2.7版本。 – zatziky

+0

這隻會匹配一個字符串_id,如果它是一個真正的ObjectId,則需要使用ObjectId語法進行搜索。 –

2

我剛剛遇到了這個問題,並且完全按照記錄,它仍然無法正常工作。

看看你的錯誤信息,並確保你沒有在複製的任何特殊字符。我得到的錯誤

SyntaxError: illegal character @(shell):1:43 

當我去者角色43這是我的對象ID的僅僅是開始,在公開引號之後,就像我粘貼的那樣。我將光標放在那裏,並且在回退時,如果它應該刪除公開引用,則什麼都不會發生。我再次打退格,它刪除了公開報價,然後我把報價放回去並執行了查詢,儘管看起來完全一樣,它仍然有效。

我在WebMatrix中進行開發,並從控制檯複製對象ID。無論何時從WebMatrix中的控制檯複製,您都可能會拾取一些會導致錯誤的隱形字符。

3

一旦你打開了mongo CLI,連接並授權了正確的數據庫。

The following example shows how to find the document with the _id=568c28fffc4be30d44d0398e from a collection called 「products」:

db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")}) 
0

我想你最好寫的是這樣的:

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")}) 
+0

你能解釋一下這個代碼如何回答這個問題嗎? –

0

要使用的ObjectId方法,你不必將其導入。它已經在mongodb對象上。

var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d'); 
 
db.yourCollection.findOne({ _id: ObjectId }, function (err, info) { 
 
    console.log(info) 
 
}); 
 
      

+1

Nope:'TypeError:db.ObjectId不是函數' – jorisw

+0

它只是'ObjectId(「SOMETHING」)' – Andy