2012-03-16 14 views
22

A. "İç içe geçmiş" ve tüm değerlerini nasıl dizine ekleyebilirim?MongoDB'de iç içe geçmiş bir dizin nasıl oluşturulur?

B. valuetwo nasıl indekslenir? http://www.mongodb.org/display/DOCS/Indexes ve bildiğim kadarıyla dokümanlar, iç içe olmayan indeksleme şeyler hakkında net değildir:

{ 
    id: 00000, 
    attrs: { 
     nested:{ 
      value: value1, 
      valuetwo: value2, 
     } 
    } 
} 

Burada baktım.

bir üst düzey alanında bulunan bir dizin oluşturma gibi eğer sen bunları oluşturmak istiyorum

cevap

37

:

db.collection.ensureIndex({"attrs.nested.value": 1}) 

Açıkça her alanda indeksleri oluşturma gerekiyor. ayrı dizine eklemek için "iç içe" olacak yer alan dizine

1

A. tüm özellikleri:

Bu sadece bir komutla yapılabilir
db.collection.createIndex({"attrs.nested.value": 1}); 
db.collection.createIndex({"attrs.nested.valuetwo": 1}); 

:

db.collection.createIndex({"attrs.nested.value": 1, "attrs.nested.valuetwo": 1}); 

B sadece "valuetwo" dizinine geçmek için:

ensureIndex olarak ensureIndex üzerinde

Kullanım createIndexDeprecated since version 3.0.0

olduğunu
+4

A'da verdiğiniz iki dizin oluşturma komutu kümesi * değil * eşdeğerdir. Birincisi, "value" ve "valuetwo" üzerinde ayrı indeksler oluşturur. İkincisi, bu değerlerin her ikisinde de tek bir bileşik indeks oluşturur. Bu indeks sadece "value" için bir değer belirten sorgularda kullanılabilir. Yani, sadece 'valuetwo' sorgular için yararlı değil. –

2

herhangi endeksli alan diziyse MongoDB otomatik olarak multikey dizin oluşturur; multikey tipini açıkça belirtmeniz gerekmez.

Bu senaryonun db.coll.createIndex ikisi için çalışacak ({ "addr.pin": 1})

Senaryo 1 iç içe NESNELER

{ 
userid:"1234", 
addr: { 
     pin:"455522" 
    } 
}, 
{ 
userid:"1234", 
addr: { 
     pin:"777777" 
    } 
} 

Senaryo 2 yuvalanmış Diziler

{ 
userid:"1234", 
addr: [ 
    pin:"455522", 
    pin:"777777", 
] 
} 

https://docs.mongodb.com/manual/core/index-multikey/

İlgili konular