【问题标题】:Populated nested schema in MongooseMongoose 中填充的嵌套模式
【发布时间】:2020-07-24 04:31:14
【问题描述】:

这是我的架构,我有一个具有嵌套产品架构的 CampaignStat 对象,但同时产品是另一个模型。

const ProductsSchema = new Schema({
_id: {
  type: mongoose.Schema.ObjectId,
  ref: 'Product'
},
clickedAt: Date,
deviceInfo: {
  type: Schema.Types.Mixed
}}, { _id: false })

const CampaignStatSchema = new Schema({
campaign: {
  type: mongoose.Schema.ObjectId,
  ref: 'Campaign'
},
subscriber: {
  type: mongoose.Schema.ObjectId,
  ref: 'Subscriber'
},
openedAt: Date,
products: [ProductsSchema]
}, {
 timestamps: { createdAt: true, updatedAt: false }
})

这是在 MongoDB 中的存储方式

"_id" : ObjectId("5f18d01ecab4eb6175cc0f83"),
"subscriber" : ObjectId("5ed6890da2c99843280a0058"),
"campaign" : ObjectId("5ed937829ff2a1f99de55150"),
"products" : [ 
    {
        "_id" : ObjectId("5f160ca2014be4e159f32fcd")
    }, 
    {
        "_id" : ObjectId("5f160ca2014be4e159f3302e")
    }, 
    {
        "_id" : ObjectId("5f160ca2014be4e159f33036")
    }, 
    {
        "_id" : ObjectId("5f160ca2014be4e159f3311a")
    }, 
    {
        "_id" : ObjectId("5f160ca2014be4e159f33159")
    }
],
"createdAt" : ISODate("2020-07-22T23:47:42.228Z"),
"__v" : 0

我需要填充产品,我正在执行此操作,但我无法获取产品集合属性

const CampaignStats = await this.find({ campaign: "5ed937829ff2a1f99de55150" })
      .populate('subscriber')
      .populate({
        path: 'products',
        model: 'Product'
      })

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

如果有人遇到同样的问题,我改变了这个(产品的_id):

const ProductsSchema = new Schema({
product: {
  type: mongoose.Schema.ObjectId,
  ref: 'Product'
},
clickedAt: Date,
deviceInfo: {
  type: Schema.Types.Mixed
}}, { _id: false })

我的查询是这样的:

this.find(query)
  .populate({ 
     path: 'products',
     populate: {
       path: 'product',
       model: 'Product'
     } 
  })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2019-12-06
    • 2020-06-07
    • 2016-10-12
    相关资源
    最近更新 更多