MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Lọc mảng lồng nhau với các điều kiện dựa trên giá trị đối tượng nhiều cấp và cập nhật chúng - MongoDB tổng hợp + cập nhật

Tôi đã viết truy vấn tổng hợp

        db.session.aggregate([
          {
            $unwind:"$Sessions"
          },
          {
            $unwind:"$Sessions.Conversations"
          },
          {
            $unwind:"$Sessions.Conversations.Messages"
          },
          {
            $match:{
              "Sessions.Id" : "Session01",
              "Sessions.Conversations.Messages.Direction":{
                $in:[
                  "inbound", "outbound"
                ]
              },
              "Sessions.Conversations.Messages.Status":{
                $in:[
                  "sent", "delivered" 
                ]
              }
            }
          },
          {
            $group:{
              "_id":"$Sessions.Conversations.Id",
              "Messages":{
                $push:"$Sessions.Conversations.Messages"
              }
            }
          }
        ]).pretty()

Đầu ra

        {
                "_id" : "Conversation02",
                "Messages" : [
                        {
                                "Id" : "Message05",
                                "Status" : "sent",
                                "Direction" : "outbound"
                        }
                ]
        }
        {
                "_id" : "Conversation01",
                "Messages" : [
                        {
                                "Id" : "Message03",
                                "Status" : "delivered",
                                "Direction" : "inbound"
                        },
                        {
                                "Id" : "Message04",
                                "Status" : "sent",
                                "Direction" : "outbound"
                        }
                ]
        }

Bây giờ để cập nhật tài liệu:

Tôi đã sử dụng positional-filter

        db.session.update(
          {},
          {
            $set:{
              "Sessions.$[session].Conversations.$[].Messages.$[message].Status":"read"
            }
          },
          {
            "arrayFilters": [{"session.Id":"Session01"},{ "message.Id": "Message05" }] 
          }
        )

Thao tác này sẽ cập nhật trạng thái là read cho "session.Id":"Session01""message.Id": "Message05"

Hy vọng điều này sẽ giúp bạn. :)

CẬP NHẬT

        db.session.update(
          {},
          {
            $set:{
              "Sessions.$[session].Conversations.$[].Messages.$[message].Status":"read"
            }
          },
          {
            "arrayFilters": [
              {
                "session.Id":"Session01"
              },
              { 
                "message.Direction": {
                  $in :[
                    "inbound", 
                    "outbound"
                  ]
                },
                "message.Status": {
                  $in :[
                    "sent", 
                    "delivered"
                  ]
                }
              }
            ] 
          }
        )



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng SqlBulkCopy với MongoDB

  2. Không thể đặt đường dẫn mongodb trong sao băng trên hệ thống cửa sổ

  3. thời gian tìm kiếm có chỉ mục> không có chỉ mục

  4. Truy vấn giữa các ngày trong MongoDB

  5. tổng hợp kết nối mongodb