2013-12-17 122 views
0

我正在使用範圍查詢處理分頁功能。我使用這個測試查詢在蒙戈外殼:如何在不使用mongo shell的情況下查詢ObjectId

> var params = {$query: {_id: {$lt: ObjectId("52b06166eff887999c6efbd9")}}, $orderby: {_id: -1}, $maxScan: 3} 
> params 
{ 
    "$query" : { 
    "_id" : { 
     "$lt" : ObjectId("52b06166eff887999c6efbd9") 
    } 
    }, 
    "$orderby" : { 
    "_id" : -1 
    }, 
    "$maxScan" : 3 
} 
> db.events.find(params) 

我希望能夠通過序列化params對象到Web服務(如URL查詢字符串)。但是,ObjectId類僅在shell中可用。有沒有辦法指定ObjectId作爲不在shell中的查詢的一部分?我已經試過以下爲$lt值沒有成功:

'ObjectId("52b06166eff887999c6efbd9")' 
'new ObjectId("52b06166eff887999c6efbd9")' 
{"$oid" : "52b06166eff887999c6efbd9"} 

回答

1

一般來說,這種抽象是無論你使用MongoDB的驅動程序處理。如果您使用的是實際的驅動程序,你可以做查詢上_id不使用ObjectId()

貓鼬/ Node.js的例子:

People.find({ _id : "Valid ObjectID String" }, function(e, person) { 
    console.log(e, person); 
}); 

如果你仍然需要ObjectId幫手,通常你能夠引用它在任何你需要的本地驅動程序。

+0

感謝您的澄清。雖然我也在下面提到,我在客戶端JavaScript中這樣做,所以我不確定是否有適用的驅動程序... – ytran

+0

@ytran在這種情況下,這一切都歸結爲請求如何碰到'mongo'外殼。從它的聲音中,你可能正在做的是寫一個文件並將其管入「mongo」外殼。如果是這樣的話,你可以解析_id字段並用ObjectId('+ string +')替換_id字符串' –

+0

@ytran然而,你應該小心,這很容易讓MongoDB實例失效。例如,這個查詢可以傳遞到你的webhook中:'{「$ where」:「while(1 = 1){};」 }' –

1

在最後一個例子中,你正在做的是將你的objectId作爲一個字符串(前兩個例子)或作爲字典的第三個例子。所以肯定它不起作用。

您只能傳遞一個字符串'52b06166eff887999c6efbd9'作爲參數,然後當您收到它時,您可以在服務器上構建正常的ObjectId。例如在PHP中,您可以通過以下方式構建它:new MongoId('your string');

+0

感謝您的反饋。不幸的是,在這種情況下,我正在使用現有的Web服務,所以沒有服務器端的說法。 – ytran

相關問題