我正在使用java应用程序更新MongoDB上的文档。唯一的键是“\u id”,但最近我被要求更新它们来检查日期字段。我想更新DPoCube而不必知道它是否已经存在,所以我使用Update:Update:true,但是因为我使用了过滤器中的日期,而这不是文档密钥的一部分,所以我得到了错误:
{
"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})