如何在mongo中基于字符串更新不同的子文档

时间:2018-02-13 07:10:04

标签: java mongodb

以下是我试图更新的文件:

{
    "_id" : "12",
    "cm_AccAmt" : 30,
    "cmPerDaySts" : [ 
        {
            "cm_accAmt" : 30,
            "cm_accTxnCount" : 2,
            "cm_cpnCount" : 2,
            "cm_accDate" : "2018-02-12"
        }, 
        {
            "cm_accAmt" : 15,
            "cm_accTxnCount" : 1,
            "cm_cpnCount" : 1,
            "cm_accDate" : "2018-02-13"
        }
    ],
    "cpnPerDaySts" : {
        "cpnFile" : "path",
        "perDayAcc" : [ 
            {
                "cm_accAmt" : 0,
                "cm_accTxnCount" : 0,
                "cm_cpnCount" : 0,
                "cm_accDate" : "2018-02-12"
            }, 
            {
                "cm_accAmt" : 0,
                "cm_accTxnCount" : 0,
                "cm_cpnCount" : 0,
                "cm_accDate" : "2018-02-13"
            }
        ]
    }
}

我想根据字符串日期字段更新两个列表 cmPerDaySts cpnPerDaySts cm_accDate ,如果匹配可用。< / p>

到目前为止,为实现此任务而尝试的代码是:

ArrayList<BasicDBObject> filter = new ArrayList<>();
filter.add(new BasicDBObject("_id", "12").append("cmPerDaySts.cm_accDate", "2018-02-12"));
filter.add(new BasicDBObject("_id", "12").append("cpnPerDaySts.perDayAcc.cm_accDate", "2018-02-12"));

Document document2 = mongoCollection.findOneAndUpdate(new BasicDBObject("$or", filter),
        new BasicDBObject("$inc",
                new BasicDBObject("cmPerDaySts.$.cm_accAmt", 15).append("cm_AccAmt", 15).append("cmPerDaySts.$.cm_accTxnCount", 1)
                        .append("cmPerDaySts.$.cm_cpnCount", 1).append("cpnPerDaySts.perDayAcc.cm_accTxnCount", 1)),
        new FindOneAndUpdateOptions().upsert(false).returnDocument(ReturnDocument.AFTER));
System.out.println(document2.toJson());

但最终因以下异常而失败:

线程中的异常&#34; main&#34; com.mongodb.MongoCommandException:命令失败,错误16837:&#39;位置运算符未找到查询所需的匹配项。未更新的更新:

我希望在单个更新查询中实现此目的而不是多个。任何人都可以指出我正确的方向或方法来解决这个问题。

0 个答案:

没有答案