【发布时间】:2019-02-08 12:48:01
【问题描述】:
我正在构建一个应用程序,我已经创建了 2 个模型。
const UserSchema = new Schema({
_id: Schema.Types.ObjectId,
account:{
type: String,
unique: true
},
email: String,
first_name: String,
last_name: String
}
const VenueSchema = new Schema({
_id: Schema.Types.ObjectId,
venue_type: String,
capacity: Number
})
和
const MediatorSchema = new Schema({
_id: Schema.Types.ObjectId,
account:{
type: String,
unique: true
},
user: {type: Schema.Types.ObjectId,
ref:'User'
}
venue: {type: Schema.Types.ObjectId,
ref:'Venue'
}
})
创建调解器模式是为了填充多个路径。
问题是当我尝试创建像
这样的查询时var populateQuery = [{path:'user',match: { account:'testuser1'},select:'email'},{path:'venue',match: { venue_type: 'club'}, select:'venue_type'}];
const confirmedVenues = await Mediator.find({})
.exists('venue',true)
.populate(populateQuery)
.exec();
当匹配未完成时,返回的数组包含具有空值的对象。
例如,当我查询以前的匹配项时,我得到以下结果
所以我想要的是,当用户或场地或某物为 NULL 时(因此匹配未完成),不返回 Whole 对象。
我得到了以下解决方案,但我不想这样做
var i =confirmedVenues.length;
while(i--){
if(confirmedVenues[i].user == null){
temp.splice(i,1)
}
}
【问题讨论】:
-
你必须在这里使用
$lookup聚合...没有其他选项
标签: javascript mongodb mongoose mongoose-populate