[英]MongoDB with Java driver - Adding a new set to a nested array using $addToSet and updateOne
我有一个条目,如下所示。
{
"_id" : ObjectId("57f6021caa3e1d3ee099af0d"),
"user" : "JBL123",
"name" : "Joe Bloggs",
"monthly_activity" : [
{
"month" : "September2016",
"status" : "active",
"daily_stats" : [
{
"date" : "27/SEP/2016",
"stats" : [
{
"category":
"stat1":
"stat2":
},
{
"category":
"stat1":
"stat2":
}
]
},
{
"date" : "28/SEP/2016",
"stats" : [
{
"category": ...
"stat1": ...
"stat2": ...
},
{
"category": ...
"stat1": ...
"stat2": ...
}
]
},
],
"extra_fields": ....
}
]
}
我想在指定日期插入新类别的统计信息。
我尝试了以下
mdb.getCollection("users").updateOne(new Document("user", "JBL123").append("monthly_activity.daily_stats.date", "27/SEP/2016"),
new Document("$addToSet", (new Document("monthly_activity.daily_stats.$.stats",
new Document("category",cat)
.append("stat1", s1)
.append("stat2", s2)))));
但是,它不喜欢使用点符号来访问数组的子数组。 我收到以下错误...
线程“ main” com.mongodb.MongoWriteException中的异常:无法使用字符串字段名称[daily_stats]追加到数组
是否可以通过单个更新?
monthly_activity
是一个数组,因此您需要使用位置值/运算符引用一个元素。
为了标识更新字段,即使字段嵌套在数组中( 当前限制 ),您也只能使用一次位置运算符$
。 这将需要您知道其他数组元素在层次结构中的位置。 在这种情况下,你将需要了解的任何位置monthly_activity
或daily_stats
。
如果您具有monthly_activity
元素的位置(例如0),那么您可以通过monthly_activity.0.daily_stats.$.stats
来标识更新字段。
位置$运算符不能用于遍历一个以上数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$占位符的替换是单个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.