Arrays 在MongoDB中的集合数组中更新集合
我的MongoDB中有一个mongo集合Arrays 在MongoDB中的集合数组中更新集合,arrays,mongodb,mongodb-query,Arrays,Mongodb,Mongodb Query,我的MongoDB中有一个mongo集合工作区,它由如下记录组成: { "_id" : ObjectId("58bdc4a13504f5ed743ad025"), "name" : "My workspace", "user_id" : ObjectId("58b6cf53988a874af070fd3b"), "uploads" : [ { "original" : "DE-20__450_GG_5002_N23_994
工作区
,它由如下记录组成:
{
"_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"
}
]
}
现在,我的目标是在数组上传
的某个记录中附加一些内容,匹配条件为原始
字段值。例如,我想将“pseg:“DE-20_u450_GG_5002_N23_994_u0136.pseg.tif”
附加到{“原件”:“DE-20_u450_GG_5002_N23_994_u0136.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"
}
]
}
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"}}})
我尝试使用$elemMatch
,然后以以下方式添加了$addToSet
:
{
"_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"
}
]
}
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')
我想我的查询做错了。有人能告诉我哪里出了问题,我怎么解决吗
对不起,我的英语不好:)希望你能理解我说的话。这是正确的语法。您必须将
$set
与positional
运算符一起使用才能到达元素
db.getCollection('workspaces').update(
{"_id": ObjectId("58bdc4a13504f5ed743ad025"),"uploads": {$elemMatch: {"original": "DE-20__450_GG_5002_N23_994__0136.tif"}}},
{$set:{"uploads.$.pseg" : "DE-20__450_GG_5002_N23_994__0136.pseg.tif"}})
更多信息请点击此处
您可以简化查询条件。对于单个查询条件,不需要使用$elemMatch
运算符。您可以使用点表示法
db.getCollection('workspaces').update(
{"_id": ObjectId("58bdc4a13504f5ed743ad025"),"uploads.original": "DE-20__450_GG_5002_N23_994__0136.tif"},
{$set:{"uploads.$.pseg" : "DE-20__450_GG_5002_N23_994__0136.pseg.tif"}})
更多信息请点击此处
非常感谢它的工作。非常感谢这个链接,它对理解正确的语法非常有帮助。还感谢你给点符号的想法,我不知道我们也可以在集合数组的情况下使用它。