插入不起作用的默认值mongodb

插入不起作用的默认值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。 在我们的生产系统中,

我使用的是mongoose版本
5.2.5
,这是我订购的样本型号

....
let PlaceOrderSchema = new mongoose.Schema({
        any: {}
}, { strict: false },
    { timestamps: { updatedAt: 'last_updated', createdAt: 'created' });
我在主脚本中使用上述模型,并使用mongoose
save
findOneAndUpdate
。 在我们的生产系统中,我们看到许多文档在保存文档中缺少
last\u updated

以下是主脚本中mongoose
save
方法和
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 }
)