簡體   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