插入不起作用的默认值mongodb
我使用的是mongoose版本插入不起作用的默认值mongodb,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,我使用的是mongoose版本5.2.5,这是我订购的样本型号 .... let PlaceOrderSchema = new mongoose.Schema({ any: {} }, { strict: false }, { timestamps: { updatedAt: 'last_updated', createdAt: 'created' }); 我在主脚本中使用上述模型,并使用mongoosesave和findOneAndUpdate。 在我们的生产系统中,
5.2.5
,这是我订购的样本型号
....
let PlaceOrderSchema = new mongoose.Schema({
any: {}
}, { strict: false },
{ timestamps: { updatedAt: 'last_updated', createdAt: 'created' });
我在主脚本中使用上述模型,并使用mongoosesave
和findOneAndUpdate
。
在我们的生产系统中,我们看到许多文档在保存文档中缺少last\u updated
键
以下是主脚本中mongoosesave
方法和findOneAndUpdate
的示例代码。我们看到一些文档在键处更新了,但很少有文档在保存文档时没有更新
let orderModel = require('./orderModel');
let newOrder = {
order_no: 1234
};
//save usage code
(new Order(newOrder).save({lean: true}, ()=> {
//do...something
}));
//findOneAndUpdate usage Code
let orderNo = 123
OrderModel.findOneAndUpdate({ order_no: orderNo },
{
$set: { items: [{product_id: 'abc', quantity: 1}] },
},
{ new: true, upsert: true },
(err, res) => {
//do_something
});
任何人都可以分享为什么我们只有很少的文档是在更新时保存的吗?您需要在更新操作期间使用选项
默认情况下,mongoose仅在创建新对象时应用默认值
文件。如果使用update()和
findOneAndUpdate()。但是,Mongoose4.x允许您选择使用它
使用setDefaultsOnInsert选项的行为
OrderModel.findOneAndUpdate(
{ order_no: orderNo },
{ $set: { items: [{ product_id: "abc", quantity: 1 }] }},
{ new: true, upsert: true, setDefaultsOnInsert: true }
)