我想对数组中嵌套对象中存在的字段执行更新。

考虑一下:

var PlatformPhotoAlbumSchema = new Schema({
  platformAlbumId: String,
  platformPhotoIds: [String]
}, { _id : false });

var SocialProfileSchema = new Schema({
  platformPhotoAlbums: [PlatformPhotoAlbumSchema]
});


例:

{
platformPhotoAlbums: [
    {
    platformAlbumId: "a",
    platformPhotoIds: ["1","2"]
    },
    {
    platformAlbumId: "b",
    platformPhotoIds: ["3","4"]
    },
    {
    platformAlbumId: "c",
    platformPhotoIds: ["5","6"]
    }
]

}



如何更新现有对象,例如,带有platformPhotoIds的带有“ c”的platformAlbumId:[“ 5”,“ 6”,“ 7”]
如果不存在platformAlbumId带“ c”的文档,则创建一个新的对象,并将platformAlbumId带为“ c”,并创建platformPhotoIds:[“ 5”,“ 6”,“ 7”],然后插入platformPhotoAlbums。


我想在一个单一的mongodb查询中做到这一点。知道怎么做吗?

最佳答案

从您要完成的工作的外观来看,我认为对于查询实际需要执行的操作,可以考虑一个更简单的概念

您想将新对象推入看起来像这样的对象数组中

{
  platformAlbumId: "c",
  platformPhotoIds: ["5","6"]
}


并(在此之前)删除数组中所有与platformAlbumId: "c"的查找相匹配的项目

编辑:

实际上比这更好,您应该能够在查询findAndModify值时使用platformAlbumId命令,使用新的platformPhotoIds值更新集,并且将upsert bool设置为true http://docs.mongodb.org/manual/reference/command/findAndModify/

关于javascript - 如何在数组内的嵌套对象的数组上执行更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32278551/

10-12 13:24
查看更多