javascript - 如何使用 $in 查询 mongodb 中 id 存储在 `var ids` 数组中的文档?

标签 javascript json mongodb mongodb-query mongojs

我想从用户输入传递给我的代码的某个数组中查询具有 id 的所有文档:

var attackersIds = fights[i].attackersIds;
attackers = cardsCollection.find({"_id" : { "$oid" : { $in: attackersIds } } });

问题是我收到一个错误:

MongoDB: Can't canonicalize query: BadValue unknown operator: $oid

我发现可以通过使用 ObjectId(...) 来解决这个问题,但是当我这样做时:

var attackersIds = fights[i].attackersIds;
for(var a=0; a<attackersIds.length; a++){
    attackersIds[a] = ObjectId(attackersIds[a]);
}
attackers = cardsCollection.find({"_id" : { "$oid" : { $in: attackersIds} } });

我收到另一个错误:

ReferenceError: \"ObjectId\" is not defined.

我猜这是因为旧版本的node.js,但我无法更改它,因为我的服务器提供商不允许我进行升级。

那么,如何在 mongodb 中查询 id 存储在我的 varattackersIds 数组中的文档?

示例文档:

{ "_id": { "$oid": "567ee17ae4b0128ba4ce9049" }, "classId": 9, "name": "Recruit", "description": "", "type": "creature", "cost": { "yellow": 1 }, "attack": 1, "defense": 0, "hp": 1, "area": "field1", "playerId": "56590c7ce4b03fe0cf20842d" }
{ "_id": { "$oid": "567ee17ae4b0128ba4ce904a" }, "classId": 1, "name": "Farm", "description": "", "type": "building", "cost": {}, "attack": 0, "defense": 0, "hp": 5, "generatesMana": { "yellow": 1 }, "area": "hand", "playerId": "56590c7ce4b03fe0cf20842d" }
{ "_id": { "$oid": "567ee17ae4b0128ba4ce904b" }, "classId": 1, "name": "Farm", "description": "", "type": "building", "cost": {}, "attack": 0, "defense": 0, "hp": 5, "generatesMana": { "yellow": 1 }, "area": "hand", "playerId": "56590c7ce4b03fe0cf20842d" }
{ "_id": { "$oid": "567ee17ae4b0128ba4ce904c" }, "classId": 9, "name": "Recruit", "description": "", "type": "creature", "cost": { "yellow": 1 }, "attack": 1, "defense": 0, "hp": 1, "area": "deck", "playerId": "56590c7ce4b03fe0cf20842d" }

最佳答案

尝试交换 $in 和 $oid 的顺序

"_id": {
        "$in": [
            {
                "$oid": "54651022bffebc03098b4567"
            },
            {
                "$oid": "54651022bffebc03098b4568"
            }
        ]
   }

在你的情况下,你需要一个小的辅助函数,从 id 数组到带有 $oid 字段的对象数组

attackers = cardsCollection.find({"_id" : { "$in" : attackersIds.map(function(element){
    return {
        "$oid": element
    });

关于javascript - 如何使用 $in 查询 mongodb 中 id 存储在 `var ids` 数组中的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474896/

相关文章:

php - $.ajax JQuery 进度条

android - 在后台线程中工作,停止 UI 线程

Java 从 JSON 文件导入 JTable

javascript - 如何计算并返回数据库更新的新数量 - NodeJs

javascript - 使用 MongoDB 在 $where 中传递参数

javascript - 如何处理在 Mongodb 中存储为字符串的日期?

javascript - 在 React 路由中将 Props 传递给组件

javascript - 在 Bootstrap Popover 中插入图像

javascript mocha,节点异常测试用例

javascript - json中的空数组问题