node.js - 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})
这对我不起作用:
- 它使用正确的产品创建订阅,
_id
但不会创建实际产品。 - 如果我单独创建产品,我无法在订阅中填充产品。
- 如果我对产品和订阅都使用 ObjectId,
_id
我会收到错误消息CastError: Cast to ObjectId failed for value {
。
有什么办法可以做到这一点?
解决方案
推荐阅读
- scala - 使用 flatMap 调用地图(对于 Option 数据类型)但类型在 scala 中不匹配
- python-3.x - Tkinter,单击时将其他文本框滚动到文本框 1 中包含的文本。没有标签绑定可以吗?
- django-views - Django响应有时是空白的
- php - 表排序器在行单击时打开子行
- tsql - 这些连接有什么区别?
- reactjs - 使用 Redux 反应生命周期 (componentDidMount)
- php - PHP mysqli do while loop - 显示具有 1 个或多个关联记录的类别
- python - 解析 WhatsApp 消息:如何解析多行文本
- github - 为什么我必须在`git clone`之后运行`git init`?
- javascript - 带有承诺的 LazyLoad 图像/图片