Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoosejs在objectId数组上查找_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoosejs在objectId数组上查找

Javascript Mongoosejs在objectId数组上查找,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,几个小时以来,我一直在努力解决这个问题,因此我在这里发帖。我试图在mongoose中使用find()操作符,以查找一个键是否与数组中的任何单个元素匹配,类似于但没有得到预期的结果 这是我的模式 var a = new mongoose.Schema({ b : { type : mongoose.Schema.ObjectId, ref: 'B' }, }); var A = mongoose.model('A', a); 现在我有了一个数组arr[],它保存了一些可能的类B的对象i

几个小时以来,我一直在努力解决这个问题,因此我在这里发帖。我试图在mongoose中使用find()操作符,以查找一个键是否与数组中的任何单个元素匹配,类似于但没有得到预期的结果

这是我的模式

var a = new mongoose.Schema({
    b : { type : mongoose.Schema.ObjectId, ref: 'B' },
});

var A = mongoose.model('A', a);
现在我有了一个数组arr[],它保存了一些可能的类B的对象id

arr = ["54e545fb6a0d90bb0772808b", "xxxxxxxxxxxxx", ...]
我想找到类型A的所有文档,其中字段b匹配arr中的任何元素。请注意,arr是字符串数组,但b保存ObjectId

到目前为止我已经试过了

A.find({b : {$in: arr}}, callback); //and
A.find({b : {$in: new ObjectId("54e545fb6a0d90bb0772808b")}}, callback); //manually got this one value from db

var callback = function (err, data) {
        console.log("----------------------");
        if (err)
            console.log(err);
        else {
            console.log(JSON.stringify(data, null, '\t'));
        }
        console.log("----------------------");

    }

这两种方法似乎都不起作用。谢谢您的帮助。

假设arr是表示ObjectId的字符串数组:

A.find({b : {
  $in: arr.map(function(o){ return mongoose.Types.ObjectId(o); })
}}, callback);

这仍然无法获得任何结果。它返回一个空数组。这看起来语法正确。您确定集合中存在数组中具有右侧
B
\u id
A
?如果在mongo shell中尝试类似的查询会发生什么?啊..对不起。这很有效。事实证明我用错了身份证。请原谅我的无知。实际上,我们甚至不需要转换为ObjectId,它就可以工作了。