我正在尝试使用主节点驱动程序将文档插入MongoDB。我希望按_id
进行查询,如果_id
不存在,则创建一个包含普通ObjectId的新文档。但是,来自MongoDB文档:
更新根据
query
参数中的equality子句创建基本文档,然后应用update
参数中的更新表达式。
(https://docs.mongodb.com/manual/reference/method/db.collection.update/#upsert-behavior)
意味着它会尝试使用我在查询部分中将_id
与之比较的任何内容作为文档的新ID。问题是,如果文档尚不存在,我将_id
与null
进行比较,因此在创建新文档时,它会将_id
设置为{{1} }}。有没有办法避免这种行为?我希望通过null
进行查询,但不要在upsert中使用我比较的任何内容。到目前为止,这是我的代码:
_id
此处,dbm.collection('orders').findOneAndUpdate(
{
_id: order._id
},
{
$set: order,
$setOnInsert: {_id: ObjectId()}//tried with and without this
},
{
upsert: true,
returnOriginal: false
}).then().catch()
是一个包含少量字段的对象。为了我的目的,我需要通过_id查询,而不是其他索引字段。