繁体   English   中英

在mongodb中更新嵌套数组元素而没有信誉

[英]Updating nested Array elements in mongodb without reputations

我有一个名为“测试”的集合,其中有一个像这样的文档:

{
"_id" : 1
"letters" : [ 
        [ "A", "B" ], 
        [ "C", "D" ], 
        [ "A", "E", "B", "F" ]
    ]
}

如果我使用$ addToSet这样更新文档:

db.getCollection('test').update({"_id" : 1}, {$addToSet:{"letters": ["A", "B"] }})

它不会插入另一个值。 仍然文件看起来像

{
"_id" : 1
"letters" : [ 
        [ "A", "B" ], 
        [ "C", "D" ], 
        [ "A", "E", "B", "F" ]
    ]
}

如果即时通讯这样更新:

db.getCollection('test').update({"_id" : 1}, {$addToSet:{"letters": ["B", "A"] }})

现在它将更新文档,如下所示:

{
"_id" : 1
"letters" : [ 
        [ "A", "B" ], 
        [ "C", "D" ], 
        [ "A", "E", "B", "F" ],
        [ "B", "A" ]
    ]
}

我的要求是如果im也这样给出([“ B”,“ A”]),它将不会更新该文档。 因为数组中已经存在相同的字母。

谁能给我解决方案。

试试这个答案,它的工作原理。

使用$ push在您的情况下将任何项目插入数组。

db.getCollection('stack').update(
       { _id: 1 },
       { $push: { "letters": ["B", "A"] } }
    )

有关$ push的参考,您可以查看此链接-

https://docs.mongodb.com/manual/reference/operator/update/push/

@Shubham有正确的答案。 保存到文档之前,应始终对字母进行排序。 因此,您的原始文档应该是(我更改了第三个数组):

{
  "_id" : 1,
  "letters" : [ 
        [ "A", "B" ], 
        [ "C", "D" ], 
        [ "A", "B", "C", "F" ]
    ]
}

然后在您的应用程序中进行排序。 我在这里包括一个Mongo Shell示例。

var input = ["B", "A"];
input.sort();
db.getCollection('test').update({"_id" : 1}, {$addToSet:{"letters":  input}});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM