我在MongoDB中有一个用户表,其格式如下:
{
"_id" : ObjectId("ID"),
"user" : {
"id" : "userId",
"info" : "user info",
"subscriptions" : [
{
"subName" : "sub1",
"frequency" : 1,
"contentId" : "contentId"
}
]
}
}
我想将一个订阅对象添加到名为" subscriptions。"的数组中。这是我的代码目前的样子,它不起作用。在这种情况下,我的JSONParser可以工作并返回正确的数组。
QueryBuilder builder = QueryBuilder.start("user.id").is("userId");
DBCursor cursor = mongoClient.find(builder.get())
while (cursor.hasNext()){
DBObject user = cursor.next();
BasicDBList subscriptions = (BasicDBList)JSONParser.parseObject(user, "user.subscriptions");
subscriptions.add(subscriptionDBObject);
DBObject updateSubs = new BasicDBObject();
updateSubs.put("$set", new BasicDBObject("subscriptions" : subscriptions);
mongoClient.update(user, updateSubs);
}
这样运行,但用户永远不会被编辑,WriteResult会返回" updatedExisting" :假的。如果有人能告诉我这里做错了什么,我将不胜感激。
由于
答案 0 :(得分:1)
我不熟悉Java驱动程序,所以我不会建议任何代码,但我相信你正在寻找mongo的Array Update Operators。我认为$push或$addToSet运营商会满足您的需求。
Mongo使用$ push的示例:
{{1}}
确保您了解在mongodb中使用不断增长的嵌入式阵列的性能影响。见这里:Why shouldn't I embed large arrays in my documents?
您可能还会发现此帖子很有用:Thinking About Arrays In Mongodb