MongoDB koleksiyonunun alt belgelerle sorgulanması konusunda çok fazla karışıklık olduğundan, yukarıdaki cevapları örneklerle açıklamanın değeceğini düşündüm:
İlk message
olarak koleksiyona sadece iki nesne ekledim: as:
> db.messages.find().pretty()
{
"_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"),
"headers" : {
"From" : "reservations@marriott.com"
}
}
{
"_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"),
"headers" : {
"From" : "reservations@marriott.com",
"To" : "kprasad.iitd@gmail.com"
}
}
>
Sorgunun sonucu nedir: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Olması gereken bir belgeler için bu sorgular çünkü headers
nesneye eşit {From: "reservations@marriott.com"}
, sadece yani başka alanları içeren ya da biz bir alanın değeri olarak tüm alt belgeyi belirtmelidir.
@ Edmondo1984'ün cevabına göre
Alt belge, alan sırası da dahil olmak üzere tam olarak belirtilen alt belgeyle eşleşiyorsa, alt belgelerdeki eşitlik eşleşen belgeleri seçer .
Yukarıdaki ifadelerden aşağıdaki sorgu sonucu ne olmalıdır?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
Ve ne sırasını değiştirmek eğer From
ve To
ikinci dokümanların alt dokümanlarla aynı yani?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
bu nedenle, alan sırası da dahil olmak üzere, belirtilen alt belgeyle tam olarak eşleşir .
Nokta operatörünü kullanmak için her biri için çok açık olduğunu düşünüyorum. Aşağıdaki sorgunun sonucunu görelim:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Yukarıdaki örnekle yapılan bu açıklamaların , alt belgelerle sorgu bulma konusunda daha fazla netlik kazanmasını umuyorum .