我有一条通过 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);
});
});
如果由于某种原因直接创建对象 ID 不起作用,也可以在映射函数中检查 new ObjectId.createFromHexString(id)
关于错误:
Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
它被抛出是因为 find
需要一些 ObjectId
结构,它看起来像这样:
{'_id':'somehexof24char123456789'}
但它找不到包含所需字符串的 _id
,因此会抛出此错误。
关于javascript - Find() 与 id 数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51680502/