如何使用 setOnInsert 在 mongodb 中放置创建/更新的字段?

pul*_*hal 6 mongodb node.js node-mongodb-native

我正在使用 nodejs 客户端来循环输入并创建一个将传递给bulkWrite操作的值数组:

  var updateVal = { sku: item.sku, name: item.name, updatedAt: new Date()};
  var insertVal = { sku: item.sku, name: item.name, createdAt: new Date(), updatedAt: new Date()};
  itemsToSave.push({
    updateOne: {
      filter: {
        sku: item.sku
      },
      //update: { $set: updateVal }, // works
      //update: { $setOnInsert: insertVal }, // works
      update: { $set: updateVal, $setOnInsert: insertVal }, // DOES NOT work
      upsert:true
    }
  });
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,我不能混用$set$setOnInsert......当我运行它,什么也没有发生,它就像一个无操作。这是批量操作的限制吗?

我正在使用 node-mongodb-native/2.1 来处理 mongodb 3.0.7

setOnInsert的文档表明这应该是可能的:

...
  {
     $set: { item: "apple" },
     $setOnInsert: { defaultQty: 100 }
  },
  { upsert: true }
Run Code Online (Sandbox Code Playgroud)

这就是为什么我的问题是将它与 bulkWrite 一起使用

更新

这有效:

      update: {
        $currentDate: { updatedAt: true },
        $set: updateVal,
        $setOnInsert: {
          createdAt: new Date()
        }
      },
      upsert:true
Run Code Online (Sandbox Code Playgroud)

感谢通过 github 代码搜索找到的示例:https : //github.com/rainder/node-process-stat/blob/22899f49413314402645ae57bc691bd389d226bd/src/server/router/log.js#L49-L59