我想对数组中嵌套对象中存在的字段执行更新。
考虑一下:
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/