MongoDB更新在数组内创建数组

时间:2014-03-26 14:28:47

标签: java mongodb

我一直坐在这个问题上几个小时,无法找到解决方案,所以我决定寻求你的帮助。我的查询有什么问题?问题是它在数组内部创建了数组,尽管我想要的结果是简单的数组。

BasicDBList list = new BasicDBList();

for (Paths pair : objects)
{
    list.add(new BasicDBObject("path", pair.getPath())
    .append("thumbnailPath, pair.getThumbnailPath()));
}

  BasicDBObject updateCommand = new BasicDBObject();
    updateCommand.append( "$push", new BasicDBObject( "imageContent", list ) );
    WriteResult result = viewsCollection.update( new BasicDBObject(MongoFieldNames.ID, groupId), updateCommand, true, true );

推送数组的结果是

    "imageContent" : [
    [
        {
            "path" : "sadL.png",
            "thumbnailPath" : sad.png"
        },
        {
            "path" : "someImgL.png",
            "thumbnailPath" : "someimg.png"
        }
    ]
]

2 个答案:

答案 0 :(得分:0)

$ push将创建数组属性(如果它不存在)。所以在这种情况下,它会创建属性“imageContent”。然后它推送你给出的值:一个数组。你想要的只是$ set。

答案 1 :(得分:0)

我无法看到此代码,因为您没有列出它。但是,这里的问题似乎是list变量,它很可能实际 数组本身。

因此,您要添加实际数组,然后使用$push运算符代替BasicDBObject updateCommand = new BasicDBObject(); updateCommand.append( "$push", new BasicDBObject( "imageContent", new BasicDBObject( "$each", list ) ));

{{1}}

采用数组/列表并将所有列出的项目添加到现有数组中,而不是"推" 数组到现有数组中。