猫鼬| NodeJS:如何将两个“ ref”赋给同一模型术语并填充它?

问题描述 投票:0回答:1

更新:我试过了:

  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时出错,甚至当我填充时也出错?

node.js mongoose populate
1个回答
0
投票

在这种情况下,用户群体不理想。您应该尝试通过$ lookup运算符使用聚合参见:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/这样您将对数据有更多的控制权

© www.soinside.com 2019 - 2024. All rights reserved.