Mongoose:如何将附加字段添加到子文档数组中

Posted

技术标签:

【中文标题】Mongoose:如何将附加字段添加到子文档数组中【英文标题】:Mongoose: How to add additional field into subdocument array 【发布时间】:2019-01-04 21:27:18 【问题描述】:

我有一个关于mongoDB的问题,即mongoose:

假设我有 2 个模型:1)产品模型 2)用户模型

const ProductSchema = new Schema(
  title: String,
  description: String,
  product_type: String,
  image_tag: String,
  created_at: Number,
  price: Number
);
const Product = module.exports = mongoose.model('product', ProductSchema);

const UserSchema = new Schema(
  login: String,
  email: String,
  password: String,
  purchases: [
    type: Schema.Types.ObjectId,
    ref: 'product'
  ]
);
const User = module.exports = mongoose.model('user', UserSchema);

当用户购买一些商品时,我只是将产品添加到用户模型中的购​​买数组中(使用推送方法)。如果我需要将购买的 ID 与其完整描述相匹配,我使用填充。

问题是我需要以某种方式控制用户每次购买的数量 -> 我需要在数组内的每个购买对象中添加额外的字段...类似数量或总计,就像这样:

const UserSchema = new Schema(
     ...
      purchases: [
        type: Schema.Types.ObjectId,
        ref: 'product',
        quantity: 
          type: Number,
          default: 1
        
      ]
    );

我被卡住了,不知道如何实现它。上面的例子不起作用。

【问题讨论】:

quantity字段作为Userschema中的根字段,并在每次购买时使用$inc增加其数量 问题是我需要控制每次购买的数量,也就是说,如果用户购买了一些商品并且它还没有出现在 purches 数组中,则应该将其添加为带有数量字段的对象.如果用户多次购买相同的商品数量计数器应该增加 错误是什么? 没有错误,但也没有添加字段。将其推入数组后,我只看到购买的 ID。即使我填充数据没有字段......一切都没有用哭 您可能会选择 radheyshyam,但将来当您使用该类型的嵌套数据进行一些填充或聚合时,它会给您带来麻烦 【参考方案1】:

试试这个,这个方法肯定行:

const UserSchema = new Schema(
    purchases: [
            ref: 
                 type: Schema.Types.ObjectId,
                 ref: 'product'
            ,
            quantity: 
              type: Number,
              default: 1
            
          ]
 );

【讨论】:

Populagte ref 密钥或更改密钥并填充该密钥以获取产品文档信息。 谢谢你 radhey shyam。它肯定会奏效!现在我需要找到一种方法来填充 ref ;) 我很高兴您只需要在填充中传递密钥引用,例如:user.findOne(Criteria).populate( path: "<key>" ).then(result => console.log(result) ).catch(error => console.log(error); )

以上是关于Mongoose:如何将附加字段添加到子文档数组中的主要内容,如果未能解决你的问题,请参考以下文章

使用猫鼬将对象数组添加到子文档

如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?

Node.js Mongoose 如何保存新文档并向数组字段添加新值

如何使用 Mongoose 查询过滤到数组类型字段中具有指定值的文档?

MongoDB/Mongoose - 仅当某个字段是唯一的时才将对象添加到对象数组中

将新字段添加到集合的所有文档中,将文档字段中的值添加到 MongoDB (Mongoose) 中,记录为 300K+