首页 > 解决方案 > Mongoose upsert(创建)对象,带有字符串类型的ref和_id?

问题描述

我正在使用带有产品和订阅的猫鼬构建应用程序。订阅引用产品。我正在使用自定义字符串_id

// I have a product
productSchema = mongoose.Schema({
  // My own custom ID using a String
  _id:{type:String,unique:true,index:true,required:true}
})

product = mongoose.model('product',productSchema)

// I have a subscription on a product
subscriptionSchema = mongoose.Schema({
  // Here I also use a custom string
  _id:{type:String,unique:true,index:true,required:true},
  // Now I'm referencing the product using the custom string
  product:{type:String, ref:'product'}
})

subscription = mongoose.model('subscription',subscriptionSchema)

接下来我想同时创建或更新现有订阅和产品:

// Here I create my subscription
sub = {
  _id:"mysub",
  // Here I create my product
  product:{
    _id:"myprod"
  }
}

// Now I want to upsert them into the database
subscription.findOneAndUpdate({_id:sub._id},sub,{upsert:true,runValidators:true,setDefaultsOnInsert:true})

这对我不起作用:

  1. 它使用正确的产品创建订阅,_id但不会创建实际产品。
  2. 如果我单独创建产品,我无法在订阅中填充产品。
  3. 如果我对产品和订阅都使用 ObjectId,_id我会收到错误消息CastError: Cast to ObjectId failed for value {

有什么办法可以做到这一点?

标签: node.jsmongodbmongoose

解决方案


推荐阅读