Java mongoDB驱动程序替换或插入数组

时间:2016-09-01 11:33:14

标签: java mongodb

我有以下系列:

{
"_id" : ObjectId("57c73d28b61b482f5884a729"),
"complete" : true,
"han" : "12345-678",
"matchingHan" : "12345678",
"availabilities" : [
    {
        "size_a" : "45",
        "size_b" : "10.5",
        "size_c" : "11.5",
        "available" : true,
        "shop_id" : "1"
    },
    {
        "size_a" : "46",
        "size_b" : "11",
        "size_c" : "12",
        "available" : false,
        "shop_id" : "1"
    },
    {
        "size_a" : "45",
        "size_b" : "10.5",
        "size_c" : "11.5",
        "available" : true,
        "shop_id" : "2"
    },
]
}

这是我的问题:
如何更新或插入可用性数组。如果有一个size_a = 45且shop_id为1的文档,我想更新可用状态。如果没有该文件,我想插入一份新文件。我找到了that解决方案并尝试了这个:

public void updateAvailabilities(Product product){
    UpdateOptions options = new UpdateOptions();
    options.upsert(true);
    ArrayList<SizeInfos> tmpSizeInfos = product.getSizeRunAvailability();
    for (int i = 0; i < tmpSizeInfos.size(); i++) {
        Document updateSet = new Document();
        updateSet.put("$addToSet", tmpSizeInfos.get(i));
        Document availDoc = new Document();
        availDoc.put("availabilities", updateSet);
        prodCollection.updateOne(eq("matchingHan", helper.getMatchingHan(product.getHan())), availDoc, options);
    }
}

但我总是得到这个例外:

java.lang.IllegalArgumentException: Invalid BSON field name availabilities

0 个答案:

没有答案