插入默认值不起作用 mongodb
Insert default values not working mongodb
我使用的是 mongoose 版本 5.2.5
,这是我的订单示例模型
....
let PlaceOrderSchema = new mongoose.Schema({
any: {}
}, { strict: false },
{ timestamps: { updatedAt: 'last_updated', createdAt: 'created' });
我在主脚本中将上述模型与 mongoose save
和 findOneAndUpdate
一起使用。
在我们的生产系统中,我们看到许多文档在保存文档中没有缺少 last_updated
键。
这是 mongoose save
方法的示例代码,findOneAndUpdate
在我们的主要 script.We 中看到一些文档有 updated_at
键,而只有很少的保存文档时没有它
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
});
任何人都可以分享为什么我们没有 updated_at
保存的文档很少吗?
您需要在 update
操作期间使用选项 setDefaultsOnInsert: true
。
By default, mongoose only applies defaults when you create a new
document. It will not set defaults if you use update() and
findOneAndUpdate(). However, mongoose 4.x lets you opt-in to this
behavior using the setDefaultsOnInsert option.
OrderModel.findOneAndUpdate(
{ order_no: orderNo },
{ $set: { items: [{ product_id: "abc", quantity: 1 }] }},
{ new: true, upsert: true, setDefaultsOnInsert: true }
)
我使用的是 mongoose 版本 5.2.5
,这是我的订单示例模型
....
let PlaceOrderSchema = new mongoose.Schema({
any: {}
}, { strict: false },
{ timestamps: { updatedAt: 'last_updated', createdAt: 'created' });
我在主脚本中将上述模型与 mongoose save
和 findOneAndUpdate
一起使用。
在我们的生产系统中,我们看到许多文档在保存文档中没有缺少 last_updated
键。
这是 mongoose save
方法的示例代码,findOneAndUpdate
在我们的主要 script.We 中看到一些文档有 updated_at
键,而只有很少的保存文档时没有它
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
});
任何人都可以分享为什么我们没有 updated_at
保存的文档很少吗?
您需要在 update
操作期间使用选项 setDefaultsOnInsert: true
。
By default, mongoose only applies defaults when you create a new document. It will not set defaults if you use update() and findOneAndUpdate(). However, mongoose 4.x lets you opt-in to this behavior using the setDefaultsOnInsert option.
OrderModel.findOneAndUpdate(
{ order_no: orderNo },
{ $set: { items: [{ product_id: "abc", quantity: 1 }] }},
{ new: true, upsert: true, setDefaultsOnInsert: true }
)