我有两个模型:Event
和People
。
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"
}
],
有没有办法简单地进行此查询?
答案 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/