Tôi đang cố gắng tìm ra cách tôi phải cấu trúc các truy vấn sao cho chúng sẽ đạt được chỉ mục của tôi. Tôi có tài liệu có cấu trúc như sau:MongoDB - Truy vấn trên trường lồng nhau với chỉ mục
{ "attributes" : { "make" : "Subaru", "color" : "Red" } }
Với một chỉ số của: db.stuff.ensureIndex({"attributes.make":1})
Những gì tôi đã tìm thấy là truy vấn sử dụng ký hiệu dấu chấm đánh chỉ số trong khi truy vấn với một tài liệu thì không.
Ví dụ:
db.stuff.find({"attributes.make":"Subaru"}).explain()
{
"cursor" : "BtreeCursor attributes.make_1",
"nscanned" : 2,
"nscannedObjects" : 2,
"n" : 2,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"attributes.make" : [
[
"Subaru",
"Subaru"
]
]
}
}
vs
db.stuff.find({attributes:{make:"Subaru"}}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 2,
"nscannedObjects" : 2,
"n" : 0,
"millis" : 1,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
Có cách nào để có được những truy vấn phong cách tài liệu để đạt chỉ số? Lý do là khi xây dựng các truy vấn từ các đối tượng liên tục của tôi, việc tuần tự hóa chúng trở nên dễ dàng hơn nhiều như các tài liệu trái ngược với một cái gì đó sử dụng ký pháp chấm.
Tôi cũng sẽ thêm rằng chúng tôi đang sử dụng lớp bản đồ dữ liệu được phát triển tại nhà được xây dựng w/Jackson. Sẽ sử dụng một cái gì đó như Morphia giúp với việc xây dựng đúng các truy vấn này?