簡體   English   中英

node.js使用和尚從數組中獲取ID的文檔

[英]node.js getting documents by id from an array using monk

我正在嘗試從mongodb的集合中獲取一些帶有一組ID的文檔

類似於SQLish

SELECT * FROM TABLE WHERE <id> IN [1,3,4]

這是我正在使用的代碼:

var prodCollection = req.db.get('products');
      prodCollection.find({'-_id':{'$in':["572446507cd5bb7304d75993","572446507cd5bb7304d75994"]}},{}, function(err, docs){
        if(err) throw err;
        res.send(docs);
      });

我的設置是使用express和尚在本地主機上運行的node.js服務器。 我也嘗試過使用同一代碼的不同版本,無論是否使用IN和_id參數都使用單引號,但是沒有運氣,我返回的docs數組始終為空。 我可以通過從控制台訪問數據庫來確認我的數據庫確實包含集合和文檔:

> db.products.find()
{ "_id" : ObjectId("572446507cd5bb7304d75993"), "name" : "apples", "quantity" : 20, "checked" : false }
{ "_id" : ObjectId("5724466c7cd5bb7304d75994"), "name" : "bananas", "quantity" : 2, "checked" : false }
{ "_id" : ObjectId("5724467e7cd5bb7304d75995"), "name" : "cerial", "quantity" : 10, "checked" : true }

您正在嘗試使用字符串查詢數據庫,其中ObjectID是實際對象。 要將string轉換為ObjectID,可以使用mongoose.Types.ObjectId(string) ,我不確定這是否可以解決您的問題,但這是朝正確方向邁出的一步。

看來MaxKroshka和Tal Avissar都是正確的,我設法使查詢正常工作(盡管目前它仍然僅通過修改建議的代碼僅返回第一項:

首先,和尚不需要_id字段名稱以-符號進行轉義是對的,因此我用普通的_id字符串替換了它。

其次,似乎可以將純正的十六進制id字符串轉換為完全成熟的id對象,可以使用僧侶的'collection.id(hexString)'函數將其傳遞給查詢。

這是我修改后的代碼,可以正常工作(再次,但僅返回提供的數組的第一個)

var prodCollection = req.db.get('products');
var idObjects = [];

//this was the real magic to get it working, converting string id to object
for(var i=0; i<group.products.length; i++){
    dObjects.push(prodCollection.id(group.products[i]));
}

prodCollection.find({'_id':{$in:idObjects}},{}, function(err, docs){
if(err) throw err;
    res.send(docs);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM