Cập nhật đối tượng trong mảng MongoDB

Trong MongoDB, toán tử $push được sử dụng để nối một giá trị đã 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 sẽ thêm trường đó dưới dạng trường mới và bao gồm giá trị được đề cập làm thành phần của nó. Nếu trường cập nhật không phải là trường kiểu mảng thì thao tác không thành công

Tại thời điểm cập nhật nếu bản thân giá trị là một mảng, toán tử $push sẽ nối toàn bộ mảng dưới dạng một phần tử

Nếu bạn muốn thêm từng phần tử của giá trị một cách riêng biệt, toán tử $push có thể được sử dụng với công cụ sửa đổi $each

cú pháp

db.collection.update( ,{ $push: { :  } })

Thông số

TênMô tảtrường tên của cột hoặc trường vào tài liệu. giá trị. Đây là những giá trị được chỉ định cho các trường hoặc cột. truy vấn Truy vấn có thể là một biểu thức hoặc điều kiện hoặc tiêu chí

Bộ sưu tập mẫu "sinh viên"

{
        "_id" : 1,
        "sem" : 1,
        "subjects" : [
                "phys",
                "chem",
                "maths",
                "gkn",
                "stat",
                "astro"
        ],
        "achieve" : [
                70,
                87,
                90,
                90,
                65,
                81
        ]
}

Ví dụ về toán tử MongoDB $push

Nếu chúng ta muốn nối 95 vào trường mảng đạt được đối với các đối tượng điều kiện là "gkn", có thể sử dụng lệnh mongodb sau -

> db.student.update( { "subjects" : "gkn" },{ $push: { "achieve": 95 } });

Ở đây trong ví dụ trên, công cụ sửa đổi $each đã được sử dụng để nối nhiều phần tử 77,49,83 vào mảng đạt được khớp với điều kiện đối tượng bằng "gkn"

Để cập nhật một đối tượng bên trong một mảng lồng nhau trong MongoDB, bạn có thể sử dụng phương pháp này, Nó đã được thử nghiệm và hoạt động tốt

Trường hợp

Cập nhật các đối tượng mảng lồng nhau. Xem hình dưới đây để biết rõ hơn về những gì chúng ta sẽ làm. Chúng tôi sẽ cập nhật đối tượng được lồng bởi 3 cấp độ của mảng

{
 discussionList[
  discussionList [
   {
     object-value-to-be-updated.
   }
  ]
 ]
} 

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Cập nhật đối tượng trong mảng MongoDB

Dung dịch

public courseCategoryPostCommentReplyUpdate(operation: CommentReplyUpdateMutation): Promise<IDocumentUpdateType> {
    return this.courseCategoryPostCommentsModel.updateOne(
      {
        "postId" : operation.postId,
        'discussionList': {
          '$elemMatch': {
            '_id': operation.commentId,
            "discussionList._id": operation.replyId
          }
        }
      },
      {
        $set: {
          "discussionList.$[outer].discussionList.$[inner].payload": operation.payload,
          "discussionList.$[outer].discussionList.$[inner].isUpdated": true,
          "discussionList.$[outer].discussionList.$[inner].commentUpdateTime": new Date()
        }
      },
      {
        arrayFilters: [
          { "outer._id": operation.commentId},
          {"inner._id": operation.replyId}

      ]
      }
    );
  }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

FootNotes - mã này là để cập nhật câu trả lời của một bình luận

Đó là cách bạn có thể thực hiện các thao tác trên một đối tượng trong mảng lồng nhau trong tài liệu mongoDB. Bạn cũng có thể cập nhật/xóa các đối tượng có mức độ lồng ghép cao hơn bằng cách sửa đổi truy vấn

Ví dụ về xóa và nhận

Xóa bỏ

// Informational Note:
  // Delete nested array values in mongodb


  public courseCategoryPostCommentReplyDelete(operation: CommentReplyDeleteMutation): Promise<IDocumentUpdateType> {
    return this.courseCategoryPostCommentsModel.updateOne(
      {
        'postId': operation.postId,

        'discussionList': {
          '$elemMatch': {
            '_id': operation.commentId,
            'discussionList._id': operation.replyId
          }
        }
      }, {
        $pull: {
          'discussionList.$[outer].discussionList': {
            user: operation.userId,
            _id: operation.replyId
          }
        }
      },
      {
        arrayFilters: [
          { 'outer._id': operation.commentId }
        ],
        multi: false
      }
    );
  }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

ĐƯỢC

public courseCategoryPostCommentRead(postId: string): Promise<IComment> {
    return this.courseCategoryPostCommentsModel.findOne<IComment>({
      postId: postId
    }).populate('discussionList.user').populate('discussionList.discussionList.user').exec();
  }

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tôi đang sử dụng GraphQL. Bạn có thể cần lặp lại kết quả và hiển thị nhận xét/câu trả lời theo đó

Làm cách nào để cập nhật phần tử đầu tiên của mảng trong MongoDB?

Để cập nhật phần tử mảng đầu tiên của mỗi tài liệu phù hợp với truy vấn của bạn, hãy sử dụng toán tử vị trí $ . Toán tử vị trí $ tham chiếu mảng phù hợp với truy vấn. Bạn không thể sử dụng toán tử này để tham chiếu một mảng lồng nhau.

Làm cách nào để cập nhật mảng tài liệu con trong MongoDB?

sử dụng từ khóa $set
chỉ định trường động trong $set bằng cú pháp []. truy vấn = { "vị trí. các đơn vị. mã đơn vị". "PHG_KTN2" }; . { ["địa điểm. $. các đơn vị. "+ tìm thấyUnitIdx]. đơn vị Mục } }; . cập nhật ( truy vấn, updateItem, { upsert. thật } );

Làm cách nào để cập nhật một đối tượng trong mảng trong MongoDB?

Cập nhật tài liệu trong một mảng . Sử dụng toán tử $ vị trí để truy cập các trường trong tài liệu được nhúng bằng ký hiệu dấu chấm trên toán tử $. The positional $ operator facilitates updates to arrays that contain embedded documents. Use the positional $ operator to access the fields in the embedded documents with the dot notation on the $ operator.

Làm cách nào để cập nhật mảng đối tượng lồng nhau trong MongoDB?

Cập nhật mảng đối tượng lồng nhau .
db. thu thập. .
Toán tử $set thay thế giá trị của một trường bằng giá trị đã chỉ định
The filtered positional operator $[] identifies the array elements that match the arrayFilters conditions for an update operation..