簡體   English   中英

具有ID數組的Find()無法正常工作

[英]Find() with array of ids not working

我有可以通過AJAX GET調用訪問的路由。

router.get("/index/fill/:id", function(req, res){
    var idArray = req.params.id;
    console.log(idArray); // OUTPUT = "4ed3ede8844f0f351100000c", "4ed3f117a844e0471100000d"
    User.find({'_id': {$in: idArray}}, function(err, foundUsers){
        console.log(foundUsers);
    });
});

在開始查找過程之前,代碼將向我拋出此錯誤:

Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

但是當我在idArray[i]使用typeof ,它說這是一個字符串。
我在這里做錯了什么?

我認為這是因為您的ids應該是ObjectId(...)類型

確保已導入ObjectId = require('mongodb').ObjectId;

您可以嘗試如下操作:

router.get("/index/fill/:id", function (req, res) {
    var idArray = req.params.id;
    idArray = idArray.map(id => ObjectId(id));
    User.find({'_id': {$in: idArray}}, function (err, foundUsers) {
        console.log(foundUsers);
    });
});

或者也可以在地圖函數中檢查new ObjectId.createFromHexString(id) ,如果由於某種原因直接創建對象ID無效

關於錯誤:

傳入的參數必須是12個字節的單個字符串或24個十六進制字符的字符串

拋出該錯誤是因為find期望使用某種ObjectId結構,該結構看起來像這樣: {'_id':'somehexof24char123456789'}但找不到,並且_id包含必需的字符串,因此拋出此錯誤。

我認為您可以在此處此處找到有關ObjectId的一些文檔

暫無
暫無

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

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