MongoDB查询更新嵌套的对象列表

时间:2015-04-22 19:16:48

标签: java mongodb

我在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" :假的。如果有人能告诉我这里做错了什么,我将不胜感激。

由于

1 个答案:

答案 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