插入默认值不起作用 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 savefindOneAndUpdate 一起使用。 在我们的生产系统中,我们看到许多文档在保存文档中没有缺少 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

Docs

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 }
)