如何为ID不在数组中的项编写Mongoose查询

时间:2015-06-29 16:30:12

标签: mongodb mongoose

我有两个模型:EventPeople

schemas.event = new mongoose.Schema({
    eventId: Number,
    name: {type: String},
    size: Number,
    location: {type: String},
    date: {type: Date},     
    people: [{type: mongoose.Schema.Types.ObjectId, ref: models.Person}],
    note: {type: String}
});

People

schemas.person = new mongoose.Schema({
    firstname: {type: String},
    lastname: {type: String},
    age: Number,
    email: {type: String},
    gender: {type: String}
});

鉴于某个事件,我想使用Mongoose进行查询,以查找尚未为此事件注册的所有人。

这样的东西
models.Person.find({not in event.people});

对我来说棘手的是,event.people不是ID数组,而是一个看起来像

的对象数组
[
        {
            "$oid": "558ced061d35bd072e7b5825"
        },
        {
            "$oid": "558ced061d35bd072e7b58a0"
        },
        {
            "$oid": "558ced061d35bd072e7b58c6"
        }
    ],

有没有办法简单地进行此查询?

2 个答案:

答案 0 :(得分:2)

首先,您需要使用本机JavaScript方法 map() 创建ObjectId数组,该方法创建一个新数组,其结果是在此元素的每个元素上调用提供的函数阵列:

var mongoose = require("mongoose");
var arr = event.people.map(function(item){ return mongoose.Types.ObjectId(item["$oid"])});

然后,您可以使用 $nin 运算符表达式查询集合:

models.Person.find({"_id": { "$nin": arr}}).exec(callback);

答案 1 :(得分:0)

查看以下运算符:

$not - http://docs.mongodb.org/manual/reference/operator/query/not/
$in - http://docs.mongodb.org/manual/reference/operator/query/in/
$nin - http://docs.mongodb.org/manual/reference/operator/query/nin/