【发布时间】:2020-02-10 21:30:01
【问题描述】:
我目前面临一个问题,我想使用用户以前不喜欢的 mongoose 从 MongoDB 检索列表。
房源表:
const listingSchema = new Schema({
_id,
...etc
})
listingSchema.virtual('listingLikes',{
ref:'ListingLikes',
...etc
})
列表喜欢表:
const listingLikesSchema = new Schema({
_id,
listingId,
userId
})
我希望能够执行这样的查询:
ListingModel.find().populate('listingLikes').where({'listingLikes.userId':{$ne:userId}}).limit(10).exec()
基本获取用户不喜欢的所有listing。以下查询可实现此目的:
Listing.find().where({_id:{$nin:[ ...All previously liked user listings in the listing likes model ) ]}})
但是我认为这在很大程度上是低效的(必须在找到列表之前将所有用户以前喜欢的列表加载到内存中)。
我怎样才能以更有效的方式做到这一点?理想情况下不修改当前架构。
【问题讨论】:
-
你在这里有答案:Querying after populate in Mongoose希望有帮助。
-
你在这里有答案:querying-after-populate-in-mongoose希望有所帮助。
标签: mongodb mongoose aggregation-framework where-clause populate