Hướng dẫn mongodb get only nested object - mongodb chỉ lấy đối tượng lồng nhau

Có thể truy vấn cho các đối tượng cụ thể trong một tài liệu lồng nhau? Đây là một ví dụ,

Collection : Threads
{
    Documents : Messages
    {
        threadId = 1
        messages = [
            {
                user = amy
                date = 01/01/2012
                content = hey
            },
            {
                user = bell
                date = 01/01/2012
                content = hey
            },
            {
                user = bell
                date = 01/02/2012
                content = whats up
            }
        ]
    },
    {
        threadId = 2
        messages = [
            {
                user = courtney
                date = 01/03/2012
                content = first!
            }
        ]
    }
}

Tôi muốn truy vấn của tôi để nói { threadId : 1, 'messages.date' : { $gt : 01/01/2012 } }, { fields : { messages : 1 } }. Nhưng nó sẽ trả lại tất cả các tin nhắn tài liệu đó khi thực sự tất cả những gì tôi muốn là kết quả là thế này,

messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB Manual


Sử dụng menu chọn ngôn ngữ của bạn ở phía trên bên phải để đặt ngôn ngữ của các ví dụ sau.Select your language drop-down menu in the upper-right to set the language of the following examples.


Ví dụ: truy vấn sau chọn tất cả các tài liệu trong đó trường size bằng tài liệu { h: 14, w: 21, uom: "cm" }:

Bình đẳng phù hợp trên toàn bộ tài liệu nhúng yêu cầu một kết hợp chính xác của tài liệu

messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
0 được chỉ định, bao gồm cả thứ tự trường. Ví dụ: truy vấn sau không khớp với bất kỳ tài liệu nào trong bộ sưu tập
messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
1:

Để chỉ định một điều kiện truy vấn trên các trường trong tài liệu nhúng/lồng nhau, hãy sử dụng ký hiệu DOT (

messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
2).

Ghi chú

Khi truy vấn sử dụng ký hiệu DOT, trường và trường lồng nhau phải ở bên trong dấu ngoặc kép.

Ví dụ sau chọn tất cả các tài liệu trong đó trường

messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
3 lồng vào trường size bằng
messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
5:

Truy vấn sau sử dụng ít hơn toán tử (

messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
6) trên trường
messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
7 được nhúng trong trường size:

Truy vấn sau chọn tất cả các tài liệu trong đó trường lồng nhau

messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
7 nhỏ hơn
> db.queryNestedObject.insertOne(
...    {
...       "StudentName" : "James",
...       "StudentSubjectScore" : [
...          {"StudentMongoDBScore":98},
...          {"StudentCScore":92},
...          {"StudentJavaScore":91}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ccf49a9dceb9a92e6aa1962")
}
0, trường lồng nhau
messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
3 bằng
messages = [
    {
        user = bell
        date = 01/02/2012
        content = whats up
    }
]
5 và trường
> db.queryNestedObject.insertOne(
...    {
...       "StudentName" : "James",
...       "StudentSubjectScore" : [
...          {"StudentMongoDBScore":98},
...          {"StudentCScore":92},
...          {"StudentJavaScore":91}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ccf49a9dceb9a92e6aa1962")
}
3 bằng
> db.queryNestedObject.insertOne(
...    {
...       "StudentName" : "James",
...       "StudentSubjectScore" : [
...          {"StudentMongoDBScore":98},
...          {"StudentCScore":92},
...          {"StudentJavaScore":91}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ccf49a9dceb9a92e6aa1962")
}
4:

Để biết các ví dụ truy vấn bổ sung, xem:

  • Tài liệu truy vấn

  • Truy vấn một mảng

  • Truy vấn một loạt các tài liệu nhúng


Để lấy một đối tượng lồng nhau trong MongoDB, hãy sử dụng toán tử $. Trước tiên chúng ta hãy tạo một bộ sưu tập với các tài liệu -

> db.queryNestedObject.insertOne(
...    {
...       "StudentName" : "James",
...       "StudentSubjectScore" : [
...          {"StudentMongoDBScore":98},
...          {"StudentCScore":92},
...          {"StudentJavaScore":91}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ccf49a9dceb9a92e6aa1962")
}

Sau đây là truy vấn để hiển thị tất cả các tài liệu từ bộ sưu tập với phương thức trợ giúp của find () -

> db.queryNestedObject.find().pretty();

Điều này sẽ tạo ra đầu ra sau -

{
   "_id" : ObjectId("5ccf49a9dceb9a92e6aa1962"),
   "StudentName" : "James",
   "StudentSubjectScore" : [
      {
         "StudentMongoDBScore" : 98
      },
      {
         "StudentCScore" : 92
      },
      {
         "StudentJavaScore" : 91
      }
   ]
}

Sau đây là truy vấn để truy xuất một đối tượng lồng nhau -

> db.queryNestedObject.find({'StudentSubjectScore.StudentJavaScore' : 91},{'StudentSubjectScore.$': 1 , _id: 0});

Điều này sẽ tạo ra đầu ra sau -

{ "StudentSubjectScore" : [ { "StudentJavaScore" : 91 } ] }

Hướng dẫn mongodb get only nested object - mongodb chỉ lấy đối tượng lồng nhau

Sau đây là truy vấn để truy xuất một đối tượng lồng nhau -

  • Câu hỏi và câu trả lời liên quan
  • Làm thế nào để lấy tất cả các lĩnh vực lồng nhau từ bộ sưu tập MongoDB?
  • Lấy các giá trị từ mảng JSON lồng nhau trong MongoDB?
  • Tăng giá trị trong một đối tượng lồng MongoDB?
  • Truy vấn nhóm trên đối tượng lồng nhau trong MongoDB?
  • MongoDB $ addtoset để thêm một mảng đối tượng lồng sâu?
  • Làm thế nào để tạo một chỉ mục lồng nhau trong MongoDB?
  • Làm thế nào để lấy tài liệu từ một bộ sưu tập ở MongoDB?
  • Làm thế nào để chỉ nhận được dữ liệu của đối tượng JSON lồng nhau trong MongoDB?
  • Làm thế nào để sửa đổi các thuộc tính của một đối tượng lồng nhau trong JavaScript?
  • Lấy dữ liệu từ bộ sưu tập MongoDB?
  • Làm thế nào để truy xuất một đối tượng Datalink từ bảng bằng JDBC?
  • Chỉ lấy phần tử được truy vấn trong một mảng đối tượng trong bộ sưu tập MongoDB?
  • Làm thế nào để tạo ra mảng lồng đôi trong MongoDB?
  • Xây dựng một đối tượng JSON lồng nhau trong JavaScript
  • Truy vấn MongoDB cho một tìm kiếm lồng nhau