1
我有一个集“首选项”与文档结构如下的MongoDB - 更新特定数组元素
{
_id: {
userId: "abc"
},
val: {
status: 1,
prefs: [
{
value: "condition",
lastSent: ISODate("2017-07-17T23:46:53.717Z")
}
],
deal: 2,
prevDeal: 3
}
}
我想更新与帐户及状态的状态日期字段lastSent。以下是我从Java代码中获得的查询。
选择查询:
{ "_id" : { "userId" : "abc"} , "val.status" : 1 , "val.prefs.value" : "condition"}
更新查询:
{ "$set" : { "val.prefs.$.lastSent" : { "$date" : "2017-07-17T23:50:07.009Z"}}}
上面的查询如下是给错误:
虚线场 '首选项$ lastSent。' 在“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);
请显示您的Java代码。 –
我在编辑中添加了java代码。请检查。 @Héctor –
因为你做错了。你分开了钥匙。应该是'_updateQuery.put(“$ set”,新的BasicDBObject(“val.prefs。$。lastSent”,lastSent));'。如果你嵌套的钥匙,它实际上不是问同样的事情。 –