有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Mongodb更新特定数组元素

我有一个集合“prefs”,文档结构如下

{
    _id: {
        userId: "abc"
    },
    val: {
        status: 1,
        prefs: [
            {
                value: "condition",
                lastSent: ISODate("2017-07-17T23:46:53.717Z")
            }
        ],
        deal: 2,
        prevDeal: 3
    }
}

我正在尝试更新日期字段lastssent,其中包含一个关于userId和status的条件。下面是我从Java代码中派生的查询

选择查询:

{ "_id" : { "userId" : "abc"} , "val.status" : 1 , "val.prefs.value" : "condition"}

更新查询:

{ "$set" : { "val.prefs.$.lastSent" : { "$date" : "2017-07-17T23:50:07.009Z"}}}

上述查询给出的错误如下:

虚线字段的prefs.$。上次发送的“in”val.prefs.$。“lastSent”对于存储无效

我如何做到这一点

下面是我的Java代码:

BasicDBObject _idObject = new BasicDBObject();
_idObject.put("userId", "abc");

BasicDBObject _selectQuery = new BasicDBObject();
_selectQuery.put("_id", _idObject);
_selectQuery.put("val.status", 1);
_selectQuery.put("val.prefs.value", "condition");

BasicDBObject _valueUpdateQuery = new BasicDBObject();
_valueUpdateQuery.put("prefs.$.lastSent", lastSent);

BasicDBObject _updateQuery = new BasicDBObject();
_updateQuery.put("$set", new BasicDBObject("val", _valueUpdateQuery));

prefs.update(_selectQuery, _updateQuery, true, true);

共 (1) 个答案

  1. # 1 楼答案

    我刚刚在mongo shell中测试了您的代码,这些代码运行良好,您不必提及

    $date

    我用这个代码来更新日期

    db.getCollection('tester').update({ "_id" : { "userId" : "abc"} , "val.status" : 1 , "val.prefs.value" : "condition"},{ "$set" : { "val.prefs.$.lastSent" : new Date()}})