【发布时间】:2017-03-06 21:13:33
【问题描述】:
我的 MongoDB 中有一个 mongo 集合 workspaces,其中包含如下所示的记录:
{
"_id" : ObjectId("58bdc4a13504f5ed743ad025"),
"name" : "My workspace",
"user_id" : ObjectId("58b6cf53988a874af070fd3b"),
"uploads" : [
{
"original" : "DE-20__450_GG_5002_N23_994__0136.tif"
},
{
"original" : "DE-20__450_GG_5002_N23_994__0134.png"
},
{
"original" : "DE-20__450_GG_5002_N23_994__0136.png"
},
{
"original" : "DE-20__450_GG_5002_N23_994__0134.tif"
}
]
}
现在我的目标是我想在数组uploads 的记录之一中附加一些内容,匹配标准为original 字段值。例如,我想通过以下方式将"pseg" : "DE-20__450_GG_5002_N23_994__0136.pseg.tif" 附加到{"original" : "DE-20__450_GG_5002_N23_994__0136.tif"} 集合中:
{
"_id" : ObjectId("58bdc4a13504f5ed743ad025"),
"name" : "Objective",
"user_id" : ObjectId("58b6cf53988a874af070fd3b"),
"uploads" : [
{
"original" : "DE-20__450_GG_5002_N23_994__0136.tif",
"pseg" : "DE-20__450_GG_5002_N23_994__0136.pseg.tif"
},
{
"original" : "DE-20__450_GG_5002_N23_994__0134.png"
},
{
"original" : "DE-20__450_GG_5002_N23_994__0136.png"
},
{
"original" : "DE-20__450_GG_5002_N23_994__0134.tif"
}
]
}
我尝试使用$elemMatch,然后通过以下方式添加$addToSet:
db.getCollection('workspaces').update({"_id": ObjectId("58bdc4a13504f5ed743ad025"),"uploads": {$elemMatch: {"original": "DE-20__450_GG_5002_N23_994__0136.tif"}}},{$addToSet:{"uploads.$": {"pseg" : "DE-20__450_GG_5002_N23_994__0136.pseg.tif"}}})
但它给了我以下错误:
Cannot apply $addToSet to a non-array field. Field named '0' has a non-array type object in the document _id: ObjectId('58bdc4a13504f5ed743ad025')
我认为我制作的查询错误,谁能告诉我哪里出了问题,我该如何解决?
对不起我的英语不好:) 希望你明白我说的。
【问题讨论】:
标签: arrays mongodb mongodb-query