mongodb搜索id列表

时间:2014-04-28 11:35:42

标签: node.js mongodb

我正在尝试生成一个用户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,我猜这个搜索适用于单个对象。

1 个答案:

答案 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