2017-09-17 49 views
0

从我在文档中看到的我正确地做到这一点,但我不知道它为什么不更新文档。 http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#bulkWriteMongoDB批量写入不更新

const updates = [ 
{ 
    "updateOne": { 
    "filter": { 
     "Item": { 
     "$oid": "59bdbf4f857c5b78b3a4c400" 
     }, 
     "Path": "ShortDescription" 
    }, 
    "update": { 
     "$set": { 
     "Value": "100 knotzzzz" 
     } 
    } 
    } 
} 
] 

await mongoose.connection.db.collection('productdata').bulkWrite(updates); 

我做错了什么?

回答

0

我正在使用initializeUnorderedBulkOp方法,它的工作原理,但我仍然想知道为什么批量写入不起作用。这是为我工作的代码。

const bulk = mongoose.connection.db.collection('productdatas').initializeUnorderedBulkOp(); 

    data.forEach(([Path, Value]) => { 
    bulk.find({ Item: new ObjectID(_id), Path }).updateOne({ 
     $set: { 
     Value, 
     }, 
    }); 
    }); 

    await bulk.execute(); 
+0

它没有工作,因为“Item”:{“$ oid”:“59bdbf4f857c5b78b3a4c400”}'实际上并不有效。如您所做的那样,您改为转换为“ObjectId”。请注意,使用['.bulkWrite()'](http://mongoosejs.com/docs/api.html#model_Model.bulkWrite)作为“猫鼬方法”实际上会在您执行以下操作时根据模式进行“自动生成”: 'Item':“59bdbf4f857c5b78b3a4c400”'只要'Item'的实际模式设置为'Item:Schema.Types.ObjectId'。如果它没有设置为正确的类型,那么自动安装失败。 –

+0

另外,您应该**总是**检查方法的结果。它应该显示'nMatched'为0由于不正确的查询值,这应该给你一个非常清晰的提示。 –