我正在尝试生成一个用户ID列表,我想用它来在mongodb集合中找到它们。
如果我执行以下操作,我会在第3行收到错误消息:" undefined不是函数"。
var ids = [];
for (var i = 0; i < item.users.length; i++) {
ids.push(new BSON.ObjectId(item.users[i].appProfileId));
}
db.collection('users', function(err, collection) {
collection.find({_id: {$in: ids}}, function(err, users) {
if (err) {
console.log(err);
} else {
console.log("USERS to push to: " + JSON.stringify(users));
pusher(users, from, channelId);
}
});
});
如果我在这里使用答案表单:Mongo, find through list of ids它表示ObjectId未定义且崩溃。如果这是唯一的解决方案,如何为该解决方案定义ObjectId?
编辑:
var ids = [];
for (var i = 0; i < item.users.length; i++) {
ids.push(item.users[i].appProfileId);
}
console.log("ids: " + JSON.stringify(ids));
结果:
"ids": [
"535cf8e3df3aaa723fc9cad1",
"535cf8e3df3aaa723fc9cad1",
"535cf8e3df3aaa723fc9cad1"
]
但是,当我使用BSON时发生崩溃,我无法在ID中看到任何内容。如果我搜索此列表,结果为空。由于缺少BSON.ObjectId,我猜这个搜索适用于单个对象。
答案 0 :(得分:3)
使用本机驱动程序mongodb
,您可以使用
ObjectID = require('mongodb').ObjectID
类型。请参阅documentation。
您可以通过以下方式从ObjectId
导入mongoose
类型:
var ObjectId = require('mongoose').Types.ObjectId;
以下代码给了我一个好结果
var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongoose').Types.ObjectId
//var ObjectId = require('mongodb').ObjectID
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
if (err) throw err;
var ids = [new ObjectId("535e768860e89147eb66e961"), new ObjectId("535e768c60e89147eb66e962")]
var c = db.collection('users').find({
'_id': {
'$in': ids
}
})
c.each(function(err, result) {
if (err)
throw err
console.log(JSON.stringify(result))
})
});
mongoose
的来源:Can't find documents searching by ObjectId using Mongoose