Hướng dẫn what is difference between set and push in mongodb? - sự khác biệt giữa thiết lập và đẩy trong mongodb là gì?

Tôi đã đọc tài liệu trong MongoDB và tôi đã sử dụng một chứng minh đơn giản và tôi chỉ nhìn rằng: Push đang phân loại mảng nhưng addtoSet không phải là nó.

Đối với tôi trực quan là như nhau, tôi không biết sự khác biệt.

Bất cứ ai có thể giải thích cho tôi sự khác biệt?

Một suy nghĩ khác nếu nó có thể bằng tiếng Tây Ban Nha hoặc bằng tiếng Anh đơn giản, tôi sẽ aprecite nó.

Người xử lý

6.1214 Huy hiệu vàng29 Huy hiệu bạc38 Huy hiệu đồng4 gold badges29 silver badges38 bronze badges

Đã hỏi ngày 2 tháng 12 năm 2014 lúc 11:41Dec 2, 2014 at 11:41

1

$addToSet Không thêm mục vào trường đã cho nếu nó đã chứa nó, mặt khác, $push sẽ thêm đối tượng đã cho vào trường cho dù nó có tồn tại hay không.

{_id: "docId", items: [1, 2]}
db.items.update[{_id:"docId"}, {$addToSet:{items: 2}}]; // This won't update the document as it already contains 2
db.items.update[{_id:"docId"}, {$push: {items:2}}]; // this will update the document. new document {_id: "docId", items:[1,2,2]}

Kaspar Lee

5.3364 Huy hiệu vàng30 Huy hiệu bạc54 Huy hiệu Đồng4 gold badges30 silver badges54 bronze badges

Đã trả lời ngày 2 tháng 12 năm 2014 lúc 11:47Dec 2, 2014 at 11:47

Cubbukcubbukcubbuk

7.7104 Huy hiệu vàng34 Huy hiệu bạc62 Huy hiệu Đồng4 gold badges34 silver badges62 bronze badges

2

$ Push - Thêm các mục theo thứ tự mà chúng đã được nhận. Ngoài ra, bạn có thể thêm các mục giống nhau nhiều lần. - adds items in the order in which they were received. Also you can add same items several times.

$ Addtoset - Thêm các mục duy nhất, nhưng thứ tự của các mặt hàng không được đảm bảo. - adds just unique items, but order of items is not guaranteed.

Nếu bạn cần thêm các mục duy nhất theo thứ tự, bạn có thể nhóm và thêm các phần tử thông qua $ Addtoset, sau đó $ Du khóa mảng với các phần tử, $ Sắp xếp theo các mục và sau đó làm lại $ Group với $ Push Items.

Đã trả lời ngày 29 tháng 12 năm 2017 lúc 10:15Dec 29, 2017 at 10:15

0

Bên cạnh sự khác biệt mà những người khác đã đề cập

  • $push: nối một đối tượng vào một mảng
  • $addToSet: Thêm một đối tượng vào một mảng nếu nó không tồn tại

Có một sự khác biệt trong sao chép. [Điều này có thể được nhìn thấy nếu bằng cách xem local.oplog.rs]

  • Các hoạt động $push [thực sự sửa đổi mảng] được sao chép là
    db.items.updateOne[
      {_id: 'my-id', 'items': {'$ne': 'items1'},
      {'$push': {
        'items': 'item1',
      }}
    ]
    
    db.items.updateOne[
      {_id: 'my-id'},
      {'$addToSet': {
        'items': 'item1',
      }}
    ]
    
    1
  • Các hoạt động $addToSet [thực sự sửa đổi mảng] được sao chép là
    db.items.updateOne[
      {_id: 'my-id', 'items': {'$ne': 'items1'},
      {'$push': {
        'items': 'item1',
      }}
    ]
    
    db.items.updateOne[
      {_id: 'my-id'},
      {'$addToSet': {
        'items': 'item1',
      }}
    ]
    
    3

Nếu bạn đang xử lý các mảng lớn, thì sự khác biệt có thể là đáng kể

Vì vậy, trong khi một cái gì đó như [trường hợp sử dụng điển hình để duy trì mảng duy nhất]

db.items.updateOne[
  {_id: 'my-id', 'items': {'$ne': 'items1'},
  {'$push': {
    'items': 'item1',
  }}
]

db.items.updateOne[
  {_id: 'my-id'},
  {'$addToSet': {
    'items': 'item1',
  }}
]

Có thể kết thúc với cùng một tài liệu kết quả, có một sự khác biệt trong hoạt động được sao chép.

Đã trả lời ngày 1 tháng 3 năm 2019 lúc 9:49Mar 1, 2019 at 9:49

Allan Leiallan LeiAllan Lei

3083 Huy hiệu bạc4 Huy hiệu đồng3 silver badges4 bronze badges

$ Addtoset và $ Push cũng làm điều tương tự, tuy nhiên $ Push chỉ thúc đẩy bất kỳ mục nào coi thường việc trùng lặp gây ra sự dư thừa. Trước đây chỉ đẩy các mặt hàng độc đáo, không sao chép.

dat3450

9543 Huy hiệu vàng12 Huy hiệu bạc27 Huy hiệu đồng3 gold badges12 silver badges27 bronze badges

Đã trả lời ngày 3 tháng 7 năm 2017 lúc 2:31Jul 3, 2017 at 2:31

RemarioremarioRemario

3.7412 Huy hiệu vàng18 Huy hiệu bạc25 Huy hiệu đồng2 gold badges18 silver badges25 bronze badges

Như tên đề xuất $ addtoset [set] sẽ không cho phép trùng lặp trong khi $ push chỉ cần thêm phần tử vào mảng

Đã trả lời ngày 4 tháng 9 năm 2017 lúc 15:43Sep 4, 2017 at 15:43

Vipul Pandeyvipul PandeyVipul Pandey

1.29110 Huy hiệu bạc19 Huy hiệu đồng10 silver badges19 bronze badges

$ Push: Chèn giá trị vào một mảng trong tài liệu kết quả. ví dụ;

db.mycol.aggregate[[{$group : {_id : "$by_user", url : {$push: "$url"}}}]]

$ Addtoset: Chèn giá trị vào một mảng trong tài liệu kết quả nhưng không tạo sao chép. ví dụ;

db.mycol.aggregate[[{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]]

Đã trả lời ngày 15 tháng 7 năm 2018 lúc 7:46Jul 15, 2018 at 7:46

Sự khác biệt giữa Addtoset và Push trong MongoDB là gì?

Sự khác biệt nếu giá trị đã tồn tại trong mảng, $ Push vẫn sẽ nối giá trị [dẫn đến các giá trị trùng lặp]. Tuy nhiên, $ AddToSet chỉ nối thêm giá trị nếu nó không tồn tại trong mảng. Do đó, nếu giá trị đã tồn tại, $ Addtoset sẽ không nối nó [nó sẽ không làm gì].If the value already exists in the array, $push will still append the value [resulting in duplicate values]. However, $addToSet only appends the value if it doesn't already exist in the array. Therefore, if the value already exists, $addToSet won't append it [it will do nothing].

Tại sao sử dụng MongoDB $ Set?

Toán tử $ SET thay thế giá trị của một trường bằng giá trị được chỉ định.Biểu thức toán tử $ SET có biểu mẫu sau: {$ set: {:, ...}} để chỉ định một trong một tài liệu nhúng hoặc trong một mảng, sử dụng ký hiệu dấu chấm.replaces the value of a field with the specified value. The $set operator expression has the following form: { $set: { : , ... } } To specify a in an embedded document or in an array, use dot notation.

Làm thế nào để tôi đẩy trong MongoDB?

Trong MongoDB, toán tử Push $ được sử dụng để nối một giá trị được chỉ định vào một mảng.Nếu trường được đề cập không có trong tài liệu để cập nhật, toán tử Push $ thêm nó dưới dạng trường mới và bao gồm giá trị được đề cập làm yếu tố của nó.Nếu trường cập nhật không phải là trường loại mảng thì hoạt động không thành công.the $push operator is used to appends a specified value to an array. If the mentioned field is absent in the document to update, the $push operator add it as a new field and includes mentioned value as its element. If the updating field is not an array type field the operation failed.

MongoDB có bộ không?

Một bộ bản sao MongoDB là một tập hợp các phiên bản MongoDB mà tất cả đều lưu trữ dữ liệu giống hệt nhau.Một nút là nút chính trong bản sao và nó có tất cả các hoạt động ghi.Tất cả các trường hợp khác, chẳng hạn như thứ hai, sử dụng các hành động của chính để đảm bảo chúng có cùng một bộ dữ liệu.. One node is the primary node in a replica, and it gets all write operations. All other instances, such as secondaries, use the primary's actions to ensure they have the same data set.

Bài Viết Liên Quan

Chủ Đề