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

时间:2016-05-18 16:59:36

标签: node.js mongodb 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
    }
  });

但由于某种原因,我无法混合$set$setOnInsert ...当我运行它时,没有任何反应,它就像一个无操作。这是批量操作的限制吗?

我使用node-mongodb-native / 2.1与mongodb 3.0.7一起使用

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

...
  {
     $set: { item: "apple" },
     $setOnInsert: { defaultQty: 100 }
  },
  { upsert: true }

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

更新

这有效:

      update: {
        $currentDate: { updatedAt: true },
        $set: updateVal,
        $setOnInsert: {
          createdAt: new Date()
        }
      },
      upsert:true

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

0 个答案:

没有答案