我使用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