Mongoose findOne ObjectId数组返回null

时间:2015-06-28 15:33:31

标签: node.js mongodb mongoose mongodb-query

使用ObjectIds数组执行findOne查询时遇到一些问题。简化模式如下:

型号:

var InboxSchema = new Schema({
    _users: [
        {
            type: mongoose.Schema.ObjectId,
            ref: 'User',
            required: 'Users are required',
            unique: true
        }
    ]
}

mongoose.model('Inbox', InboxSchema)

查询:

var users = [];
var userIds = ['5567ead844997f969fe3f00f', '558b8492f1723b090b414765'];

for (var i=0; i<userIds.length; i++) {
    users.push(new mongoose.Types.ObjectId(userIds[i]));
}

Inbox.findOne({_users: users}).exec(function (err, inbox) {
    console.log(inbox);
}

收件箱总是返回null,尽管它在使用Mongo shell时返回了一些东西,所以我知道我的查询有效。以前,我只是单独userIds查询,我后来发现它不起作用,因为我不得不使用ObjectId进行查询。但是,即使将字符串转换为ObjectId也不起作用。

1 个答案:

答案 0 :(得分:4)

尝试使用mongo数组查询运算符$all$in

$ all将目标与所有数组元素匹配:

Inbox.findOne({ "_users": { "$all": users} }).exec(function (err, inbox) {
    console.log(inbox);
})

$ in将目标与任何数组元素匹配:

Inbox.findOne({ "users": { "$in": users} }).exec(function (err, inbox) {
    console.log(inbox);
})