我正在使用Java应用程序更新MongoDB上的文档。唯一键是“ _id”,但是最近我被要求通过检查日期字段来更新它们。我想更新dpocuments,而不必进行查找以了解它是否已经存在,因此我使用了更新选项upsert:true,但是由于我在过滤器中使用了日期,而且这不是documents关键字的一部分,因此我得到了错误:
{
"ok" : 0,
"errmsg" : "E11000 duplicate key error collection: TEST.CLIENT index: _id_ dup key: { : { clientId: \"pippoalsugo\" } }",
"code" : 11000,
"codeName" : "DuplicateKey"
}
在这种情况下,是否只有一种查询可以更新/插入? 这里是MongoDB上文档的结构以及我用来更新/插入文档的查询。
文档:
{
"_id" : {
"clientId" : "8"
},
"CLIENT" : {
"CLIENT_DOC" : [
{
"idDoc" : "ret",
"dsTimestamp" : "2018-01-15 10:01:01.000000",
"LAST_UPDATE" : ISODate("2018-01-15T10:01:01Z")
}
],
"LAST_UPDATE" : ISODate("2019-02-05T16:44:56.733Z"),
"codType" : "client",
"dsTimestamp" : "2018-01-17 08:23:01.000000"
}
}
查询:
db.CLIENT.update({
"_id": {
"clientId": "8"
},
"ANAGRAFICA_CLIENTE.LAST_UPDATE": {
"$lte": {
"$date": 1542672000000
}
}
}, {
"$set": {
"ANAGRAFICA_CLIENTE.codTipoClienteInput": "CLIENTE RETAIL",
"ANAGRAFICA_CLIENTE.dsTimestamp": "2018-11-20 00:00:00.000000",
"ANAGRAFICA_CLIENTE.LAST_UPDATE": {
"$date": 1542672000000
}
}
}, {upsert:true})