使用_id和日期在MongoDB上更新文档

时间:2019-02-06 10:13:56

标签: java mongodb

我正在使用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})   

0 个答案:

没有答案