Javascript ID数组不起作用的Find()

Javascript ID数组不起作用的Find(),javascript,arrays,ajax,mongodb,mongoose,Javascript,Arrays,Ajax,Mongodb,Mongoose,我有一条通过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,

我有一条通过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
时,它表示它是一个字符串。

我做错了什么?

我想这是因为您的
id
应该是
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不起作用,也可以在map函数中选中
new ObjectId.createFromHexString(id)

关于错误:

传入的参数必须是12字节的单个字符串或 24个十六进制字符

抛出它是因为
find
需要一些
ObjectId
结构,看起来像这样:
{u id':'somehexof24char123456789}
但是它没有找到和
\u id
,它包含一个必需的字符串,因此抛出这个错误


我想您可以找到一些关于ObjectId的文档和说明

如何提供数组作为URL参数?你能举一个请求URL的例子吗?@AlanFriedman我将所有ID添加到一个字符串中,然后使用.split()创建数组,因为这样传递数组是不常见的。我建议将数组编码为查询参数,或者如果此端点正在创建或修改资源,则将其发送到POST或PUT请求的正文中。@AlanFriedman您的意思是:
$.get(“/index/fill/:id”),{id:arrayWithIds},function(data){…}
?@brunopigato No,@Alan正在谈论您通过url
路由器发送id的方式。get(“/index/fill/:id”,function(req,res){
,这是不寻常的。请尝试添加map
new ObjectId.createFromHexString(id)
,并让我知道如果它工作正常,我将尝试使用$.param,看看会发生什么