MongoDB的Java的嵌套更新
我有一个MongoDB的文档结构类似这样的MongoDB的Java的嵌套更新
{
"_id": "002",
"list": [
{
"year": "2015",
"entries": [{...}, {...}]
},
{
"year": "2014",
"entries": [{...}, {...}]
}
]
}
我想一个新的元素推到“项”。我知道它可以使用
collection.updateOne(
Filters.eq("_id", "002"),
new Document("$push", new Document("list.0.entries", "{...}")
);
但是,这附加到“列表”的第一个元素的“条目”。我想追加到“年”2015年的“条目”。我怎样才能做到这一点与MongoDB Java驱动程序API(3.0)?
我想你应该使用类似
Filters.and(Filters.eq("_id", "002"), Filters.eq("list.year", "2015"))
PS作为过滤器的javadoc表明,这是方便使用静态导入它(使它更简洁一些,跳过“过滤器”部分)
推送条目仍然有问题。 collection.updateOne(and(eq(“_ id”,“002”),eq(“list.year”,“2015”)), new Document(“$ push”,new Document(“entries”,“ {...}“) ); 这将插入一个新的键”条目“与给定值一起”列表“,而不是”列表“与”年“内的2015年作为2015 – FrankS
我认为(没有时间去尝试这个atm ,抱歉),您应该使用 'list。$。entries' 而不是“entries”。请参阅http://docs.mongodb.org/manual/reference/operator/update/positional/。我希望这可以帮助您。 – vambo
您可以使用
Bson filter = Filters.and(Filters.eq("_id", "002"), Filters.eq("list", Filters.eq($elemMatch, Filters.eq("year", "2015")) Document list = collection.find().filter(filter)
之后,您可以遍历列表找到2015年,并得到这个条目通过java代码插入新元素。将更新后的列表保存在本地变量中,并通过更新命令将其写入您的mongoDB中。
那么是什么问题? 2015年是第一个因素。 –