gpt4 book ai didi

java - Mongodb - 更新特定数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:33 27 4
gpt4 key购买 nike

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

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

我正在尝试使用 userId 和状态的条件来更新日期字段lastSent。下面是我从 Java 代码中得出的查询。

选择查询:

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

更新查询:

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

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

“val.prefs.$.lastSent”中的虚线字段“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);

最佳答案

我刚刚在 mongo shell 中测试了您的代码,此代码工作正常,您不必提及

$date

我使用此代码来更新日期

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

关于java - Mongodb - 更新特定数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com