如何在mongodb中查询id存储在$in的“var-ids”数组中的文档
How can I query mongodb for documents that ids are stored in my `var ids` array with $in?
我想查询所有具有ID的文档,这些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存储在var attackersIds
数组中的文档呢?
样本文件:
{ "_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"
}
]
}
在您的情况下,您将需要一个小的助手函数,用$oid字段从id的数组转到对象的数组
attackers = cardsCollection.find({"_id" : { "$in" : attackersIds.map(function(element){
return {
"$oid": element
});
尝试将attackersIds数组转换为ObjectId类型的数组。如何做到这一点取决于用于查询mongodb集合的包。
与mongojs:
var mongojs = require('mongojs');
for(var a=0; a<attackersIds.length; a++){
attackersIds[a] = mongojs.ObjectId(attackersIds[a]);
}
使用mongodb:
ObjectID = require('mongodb').ObjectID;
for(var a=0; a<attackersIds.length; a++){
attackersIds[a] = new ObjectId(attackersIds[a]);
}
然后尝试仅对_id:进行查询
attackers = cardsCollection.find({"_id" : { $in: attackersIds } });
您可以尝试将其转换为如下对象:
mongoose.Types.ObjectId(string)
猫鼬在哪里你的猫鼬手柄:
var mongoose = require('mongoose')
或者您可能不需要:
CardsCollection.find({_id:{$in:attackersids}})
相关文章:
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 谷歌文档表面引擎
- 来自文档或下一个静态父级的事件委派
- 如何将childNodes用于XML文档
- 文档就绪提供了错误的选择器高度
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- BrowserId登录请求在文档加载时被调用
- 从Javascript和Php变量创建Html模板文档
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 文档就绪var未知
- 从 html 文档中提取 json var
- 当我们尝试使用直接引用调用文档对象方法时,例如:var kk = document.getElementById;kk(
- 如何在mongodb中查询id存储在$in的“var-ids”数组中的文档
- 编写一个javascript var="一些文本“;转换为预加载但为空的txt文档
- 为什么我的javascript for循环将不工作?For (var i=1;i< 5;i++;){文档.write (
- 有了ajax调用,为什么可以't我在php文档中使用这个$var post数据