Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Tôi có một tập dữ liệu như thế này:

{ 
  name : 'Doc Name',
  photos: [
      {
        name: 'photo1',
        url: 'http://.....'
      },
      {
        name: 'photo2',
        url: 'http://......'
      }
   ],
   etc ...

Sử dụng monk https://github.com/learnboost/monk Làm cách nào để cập nhật photo2? Tôi có thể sử dụng một chỉ mục khi tôi đang lặp lại trên các trường vào lúc này.

Nỗ lực hiện tại của tôi dưới đây cho tôi một lỗi và tôi không thể sử dụng một biến cho bộ chọn JSON (như trong chỉ mục).

collection.update({_id: data._id}, {photos[i].data: filename}, function(err, updatedata) {

            });

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Neil Lunn

Phù bằng vàng 144K3535 gold badges322 silver badges307 bronze badges

Đã hỏi ngày 3 tháng 2 năm 2014 lúc 1:16Feb 3, 2014 at 1:16

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Cập nhật các mục tại một vị trí trong một mảng có thể được thực hiện bằng cách sử dụng toán tử $ định vị

collection.update( 
    { _id: data.id, "photos.name": "photo2" }, 
    { $set: { "photos.$.data": "yourdata" } }
)

Đã trả lời ngày 3 tháng 2 năm 2014 lúc 2:06Feb 3, 2014 at 2:06

Neil Lunnneil LunnNeil Lunn

Phù bằng vàng 144K3535 gold badges322 silver badges307 bronze badges

2

Đã hỏi ngày 3 tháng 2 năm 2014 lúc 1:16

Cập nhật các mục tại một vị trí trong một mảng có thể được thực hiện bằng cách sử dụng toán tử $ định vị

collection.find({id: 1}, function(err, doc){
    for(i=0; i< doc.array.length; i++) {
          //do what you gotta do
          doc.array[i].property = 'new value';
    }
    collection.update({id: 1}, {$set : {"doc.array": doc.array}}, function(err,doc){
          console.log(err);
    }
})

Đã trả lời ngày 3 tháng 2 năm 2014 lúc 2:06Feb 3, 2014 at 2:11

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Neil Lunnneil LunnRyan Knell

Vì vậy, tôi đã tìm thấy một giải pháp cho vấn đề của mình nhưng có thể có một số lựa chọn tốt hơn và tôi sẽ không trả lời nó. Nhưng đối với bất kỳ ai khác có cùng một vấn đề, đây là những gì tôi đã làm:2 gold badges37 silver badges31 bronze badges

Giới thiệu

Làm việc với các mảng có thể phức tạp. Cập nhật có thể phức tạp hơn. Người ta nên làm việc cẩn thận trong khi thực hiện các hoạt động cập nhật trên các mảng. Mongoose cung cấp một vài nhà khai thác để cập nhật các mảng như $ addtoset, $ push, $ pop, v.v. Trong bài viết này, chúng tôi sẽ thảo luận về cách sử dụng các nhà khai thác đó để thực hiện các hoạt động cập nhật trên các mảng trong nodejs.

Đầu tiên chúng tôi muốn sử dụng một bộ dữ liệu để demo với. Chúng tôi sẽ sử dụng bộ sưu tập chi tiết được hiển thị ở đây:

123
2
3

{"_id": ObjectID ("5E158429A7B6505CD15E8097"), "Tên": "John", "Age": 21, "Vị trí": ["New York", "Chicago"] ")," Tên ":" SAM "," Tuổi ": 24," Vị trí ": [" New York "]} {" _ id ": ObjectID (" 5E158453A7B6505CD15E8099 ")," Tên ":" Lisa "," Tuổi ": 27," địa điểm ": [" Washington DC "," Texas "]} "_id" : ObjectId("5e158429a7b6505cd15e8097"), "name" : "John", "age" : 21, "locations" : [ "New York", "Chicago" ] }
{ "_id" : ObjectId("5e158439a7b6505cd15e8098"), "name" : "Sam", "age" : 24, "locations" : [ "New York" ] }
{ "_id" : ObjectId("5e158453a7b6505cd15e8099"), "name" : "Lisa", "age" : 27, "locations" : [ "Washington DC", "Texas" ] }

Chúng tôi sẽ sử dụng công cụ Postman để thực hiện kiểm tra điểm cuối. Bạn có thể tải xuống công cụ Postman từ www.getpostman.com.

Vì chúng tôi sẽ thực hiện một hoạt động cập nhật, chúng tôi phải đưa ra yêu cầu đặt. Trình xử lý tuyến sau sẽ được gọi khi điểm cuối ‘/cập nhật được thực thi.

Lưu ý Chúng tôi đã tạo các tuyến đường của chúng tôi bằng cách sử dụng một gói tuyệt vời cho NodeJ có tên là Express. We created our routes using a great package for NodeJS called express.

1

router.route ("/update"). đặt (hàm (req, res) {});route("/update").put(function(req, res) {});

Hãy để thảo luận về cách cập nhật mảng bằng các toán tử Mongoose trong NodeJS.

$addToSet

Toán tử $ addtoset thêm các giá trị trong một mảng nếu chúng chưa có trong đó. Chúng tôi chỉ định một mảng các giá trị và nó chỉ chèn những giá trị không có trong đó. Hãy để thêm một vài giá trị vào mảng vị trí trong đó tên là John John.

12345678910111213
2
3
4
5
6
7
8
9
10
11
12
13

router.route ("/update"). đặt (function (req, res) {& nbsp; chi tiết.updateone (& nbsp; & nbsp; {name: "john"}, & nbsp; New York "," Texas "," Detroit "]}}, & nbsp; & nbsp; function (err, result) {& nbsp; & nbsp; & nbsp; if (err) ); & nbsp; & nbsp; & nbsp;route("/update").put(function(req, res) {
  details.updateOne(
    { name: "John" },
    { $addToSet: { locations: ["New York", "Texas", "Detroit"] } },
    function(err, result) {
      if (err) {
        res.send(err);
      } else {
        res.send(result);
      }
    }
  );
});

Đến bây giờ, tài liệu trong đó giá trị của trường tên là John John có hai giá trị trong các địa điểm - New York và Chicago. Trong hoạt động cập nhật, chúng tôi sẽ thêm ba giá trị mới vào nó bằng cách sử dụng nhà điều hành $ Addtoset - New York, Texas và Detroit. Một trong ba người này đã có mặt trong mảng vị trí. Hãy để thực hiện nó và xem những gì xảy ra.

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Nó trả về một đối tượng. Ở đây, giá trị của nmodified là 1. Điều này có nghĩa là, một tài liệu đã được cập nhật. Hãy để kiểm tra thông qua vỏ Mongo.

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Hai giá trị đã được thêm vào - Texas và Detroit. Nó không thêm New York vì nó đã có mặt. Đây là cách $ Addtoset hoạt động.

$push

Toán tử $ Push có phần giống với toán tử $ Addtoset. Sự khác biệt là nó thêm các giá trị vào một mảng ngay cả khi chúng đã có mặt. Hãy để thêm vào New York New York, nơi giá trị của trường tên là John John.

12345678910111213
2
3
4
5
6
7
8
9
10
11
12
13

router.route ("/update"). đặt (function (req, res) {& nbsp; chi tiết.updateone (& nbsp; & nbsp; {name: "John"}, & nbsp; & nbsp; New York "]}}, & nbsp; & nbsp; function (err, result) {& nbsp; & nbsp; & nbsp; if (err) {& nbsp; & nbsp; } other {& nbsp; & nbsp; & nbsp; & nbsp; res.send (result); & nbsp; & nbsp; & nbsp;} & nbsp; & nbsp;} & nbsp;);});route("/update").put(function(req, res) {
  details.updateOne(
    { name: "John" },
    { $push: { locations: ["New York"] } },
    function(err, result) {
      if (err) {
        res.send(err);
      } else {
        res.send(result);
      }
    }
  );
});

Hãy để thực hiện và xem những gì xảy ra.

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Nhà điều hành $ Push đã thêm vào New New York, trong các địa điểm ngay cả khi nó đã có mặt ở đó. Đây là sự khác biệt giữa toán tử $ Addtoset và $ Push.

$pop

Toán tử $ pop sẽ loại bỏ một phần tử khỏi một mảng, từ bắt đầu hoặc kết thúc. Chúng tôi sẽ loại bỏ một yếu tố từ cả hai bên. Cú pháp của $ Pop khá giống với toán tử $ Push. Sự khác biệt duy nhất là, thay vì một mảng là giá trị, chúng ta sử dụng 1 hoặc -1. Nếu giá trị được chỉ định là 1, phần tử cuối cùng sẽ bị xóa và nếu giá trị là -1, phần tử đầu tiên sẽ bị xóa. Hãy bắt đầu bằng cách loại bỏ yếu tố cuối cùng, tức là, New York, từ tài liệu trong đó giá trị của trường tên là là John John.

123456789101112
2
3
4
5
6
7
8
9
10
11
12

router.route ("/update"). đặt (function (req, res) {& nbsp; chi tiết.updateone ({name: "john"}, {$ push: {vị trí: 1}}, hàm err, & nbsp; & nbsp; result & nbsp;) {& nbsp; & nbsp; if (err) {& nbsp; & nbsp; kết quả); & nbsp; & nbsp;} & nbsp;});});route("/update").put(function(req, res) {
  details.updateOne({ name: "John" }, { $push: { locations: 1 } }, function(
    err,
    result
  ) {
    if (err) {
      res.send(err);
    } else {
      res.send(result);
    }
  });
});

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Đúng! Giá trị cuối cùng đã bị xóa. Bây giờ, hãy để loại bỏ giá trị đầu tiên, cũng là New York New York. Lần này, chúng ta phải cho -1 là giá trị.

123456789101112
2
3
4
5
6
7
8
9
10
11
12

router.route ("/update"). đặt (function (req, res) {& nbsp; chi tiết.updateone ({name: "john"}, {$ push ; err, & nbsp; & nbsp; result & nbsp;) (kết quả); & nbsp; & nbsp;} & nbsp;});});route("/update").put(function(req, res) {
  details.updateOne({ name: "John" }, { $push: { locations: -1 } }, function(
    err,
    result
  ) {
    if (err) {
      res.send(err);
    } else {
      res.send(result);
    }
  });
});

Hướng dẫn how do you update an array value in mongodb using node js? - làm thế nào để bạn cập nhật một giá trị mảng trong mongodb bằng cách sử dụng nút js?

Đúng! Giá trị đầu tiên cũng bị xóa.

Sự kết luận

Cảm ơn bạn đã kiểm tra bài viết cơ sở kiến ​​thức của chúng tôi! Chúng tôi hy vọng bạn thích trình diễn này về một số chức năng mà chúng tôi có thể sử dụng để cập nhật các mảng với Mongoose.

Phi công nền tảng Objectrocket miễn phí!

Hãy thử được quản lý đầy đủ gián, Elaticsearch, MongoDB, PostgreSQL (beta) hoặc redis.

Bắt đầu

Làm thế nào để bạn cập nhật một phần tử mảng trong MongoDB?

Bạn có thể sử dụng các phương thức updateOne () hoặc updatemany () để thêm, cập nhật hoặc xóa các phần tử mảng dựa trên các tiêu chí được chỉ định. Nên sử dụng phương thức Updatemany () để cập nhật nhiều mảng trong một bộ sưu tập.use the updateOne() or updateMany() methods to add, update, or remove array elements based on the specified criteria. It is recommended to use the updateMany() method to update multiple arrays in a collection.

Làm cách nào để thêm các giá trị vào một mảng trong MongoDB?

Nếu giá trị là một mảng, $ Push sẽ cộng đồng toàn bộ mảng là một phần tử duy nhất.Để thêm từng phần tử của giá trị một cách riêng biệt, hãy sử dụng $ mỗi công cụ sửa đổi với $ Push.Ví dụ, hãy xem thêm một giá trị vào các mảng trong nhiều tài liệu.Để biết danh sách các công cụ sửa đổi có sẵn cho $ Push, xem các sửa đổi.$push appends the whole array as a single element. To add each element of the value separately, use the $each modifier with $push . For an example, see Append a Value to Arrays in Multiple Documents. For a list of modifiers available for $push , see Modifiers.

Làm thế nào để bạn cập nhật dữ liệu trong MongoDB bằng Node JS Express JS?

Bạn có thể cập nhật một bản ghi hoặc tài liệu vì nó được gọi trong MongoDB, bằng cách sử dụng phương thức UpdateDe ().Tham số đầu tiên của phương thức updateDe () là đối tượng truy vấn xác định tài liệu nào sẽ cập nhật.Lưu ý: Nếu truy vấn tìm thấy nhiều hơn một bản ghi, chỉ có lần xuất hiện đầu tiên được cập nhật.by using the updateOne() method. The first parameter of the updateOne() method is a query object defining which document to update. Note: If the query finds more than one record, only the first occurrence is updated.

Làm thế nào để bạn cập nhật một đối tượng trong MongoDB?

Shell MongoDB cung cấp các phương pháp sau để cập nhật các tài liệu trong một bộ sưu tập:..
Để cập nhật một tài liệu duy nhất, hãy sử dụng DB.thu thập.Cập nhật ().
Để cập nhật nhiều tài liệu, hãy sử dụng DB.thu thập.Updatemany ().
Để thay thế một tài liệu, sử dụng DB.thu thập.thay thế ().