javascript - Find() 与 id 数组不起作用

标签 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, 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,因此会抛出此错误。

我想你可以找到一些关于ObjectId的文档herehere

关于javascript - Find() 与 id 数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51680502/

相关文章:

javascript - 输入重置 react

javascript - 将 setTimeOut 添加到 Google Analytics 函数

javascript - 在 raphael.js 中缩放填充图案

java - 使用 Arrays.sort 对数组元素进行排序

jQuery ajax POST 调用 - 不包括参数

javascript - React 中的臃肿状态

jquery - 如何在 javascript 中访问从 php 创建的 json 数组

arrays - 查找每个值最后一次出现的索引

jQuery 搜索结果...悬停和单击不再有效?

javascript - 具有不透明度淡入/淡出的全屏黑色背景