更新:我试过了:
ad:[{ type: mongoose.Types.ObjectId, ref: 'Ad' }],
car:[{ type: mongoose.Types.ObjectId, ref: 'Car' }]
它可以工作,但是我无法排序,所以仍然卡住了。。
.populate('ad')
.populate('car')
.sort({createdAt:-1})
((我想按createdAt或updatedAt的时间订购)
这就是我在以下各项之前尝试过的内容:
我真的很困,而且我也知道我只需要一点帮助就可以解决它。
我正在工作nodeJS和HBS项目(网站为craigslist)。
我有不同的模型,针对不同的类别:乔布斯有自己的看法汽车有自己的看法等等...
我有一个用户模型,其中包含他们发布的每个广告。
const userSchema = new Schema({
email:{
type:String,
required:true,
trim:true,
lowercase:true,
match: [/\S+@\S+\.\S+/, 'is invalid']
},
password:{
type:String,
required:true,
trim:true
},
ad:[{ type: mongoose.Types.ObjectId, ref: 'Ad'},{ type: mongoose.Types.ObjectId, ref:'Car'}]
}, {
timestamps: {
createdAt: "created_at",
updatedAt: "updated_at"
}
});
如您所见,我有这个:
ad:[{ type: mongoose.Types.ObjectId, ref: 'Ad'},{ type: mongoose.Types.ObjectId, ref:'Car'}]
在我的猫鼬数据库中,我可以通过$ push保存此数据:
.then(ad => {
User.updateOne({email:ad.email},{$push:{ad:ad._id}})
.then(() => res.render('ads/test'))
})
一切正常,mongodb:
//mongodb database
> db.users.find().pretty()
{
"_id" : ObjectId("5e1e28663128e9643c523712"),
"ad" : [
ObjectId("5e1e28633128e9643c523711"),
ObjectId("5e1e28733128e9643c523713")
],
"email" : "[email protected]",
"password" : "$whatever$whatever.whatever",
"created_at" : ISODate("2020-01-14T20:45:26.262Z"),
"updated_at" : ISODate("2020-01-14T20:45:39.694Z"),
"__v" : 0
}
因此,我有两个来自不同模型的广告(模型A:职位类别发布,模型B:汽车类别发布)和其ID:
"ad" : [
ObjectId("5e1e28633128e9643c523711"),
ObjectId("5e1e28733128e9643c523713")
]
此后,在我的用户控制器中,我尝试填充...但是我只是在一个模型中这样做:
module.exports.myAds = (req, res, next) => {
User.findOne({email:req.session.currentUser.email})
.populate({path: 'ad', options: { sort: { 'updated_at': -1 }}})
.then(ads => {
console.log(ads)
res.render('users/my-ads', { ads:ads } )
})
.catch(err => next(err))
}
请,我需要解决这个问题。我在做什么错?
我寻找相同的解释,但没有人适合我。
我也尝试过,将ad
分割为:
ad:[{test_1:{ type: mongoose.Types.ObjectId, ref:'Ad'}},{test_2:{type: mongoose.Types.ObjectId, ref:'Car'}}]
但甚至不是很好的结果。也许我在$ push到test_1 / test_2时出错,甚至当我填充时也出错?
在这种情况下,用户群体不理想。您应该尝试通过$ lookup运算符使用聚合参见:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/这样您将对数据有更多的控制权