2016-05-25 15 views
0

Ich habe Tausende von Elementen in meiner gameItem-Auflistung mit dem folgenden als Beispiel.mongodb Suchschlüssel mit einem Leerzeichen

{ 
    "weapon name 1":{price:01}, 
    "weapon name 2":{price:100} 
} 

und ich führen eine Abfrage wie so in der Schale

db.gameItems.find({"weapon name 1":{$exists:1}}) 

nichts zurückkehrt, aber es funktioniert, wenn meine Schlüssel keine Leerzeichen haben ...

Erste Fragen: Gibt es eine Möglichkeit um Schlüsselwerte mit Leerzeichen zu suchen? Zweite Frage: Soll ich mein Datenmodell ändern, wie es sein ?:

{ 
     weapon:{name: "weapon name 1", price:01} 
     weapon:{name: "weapon name 2", price:100} 
    } 

Und dann einen Index auf das Feld Waffe Namen? Erhöht dies die Suchleistung mit nur 2 Feldern in jedem Waffendokument?

Dank

Edit:

Apologies, es die gameItems db Sammlung erscheint sieht tatsächlich so ...

{ 
    last_updated:"2016-04-01", 
    items:{ 
      "weapon name 1":{price:01}, 
      "weapon name 2":{price:100} 
    } 
} 

so wie würde ich für sie in den Artikel Dokument suchen?

+0

Die Art, wie Sie Ihr Schema umzugestalten, ist fast korrekt. Preis muss numerisch sein, scheint es, aber 01 scheint nicht korrekt zu sein. Wenn Sie häufig nach waffe.name suchen, würde das Hinzufügen eines Index die Leistung erheblich verbessern. – Tiramisu

+0

Das funktioniert gut mit mir, bist du sicher, dass du die richtige Sammlung abfragst? In Ihrer Aussage implizieren Sie, dass Sie eine 'gameItem'-Sammlung haben, aber Ihre Suchanfrage gegen die 'gameItems'-Sammlung ist? – chridam

+0

Ich habe einen Fehler gemacht. Ich aktualisierte das OP – Garuuk

Antwort

0

Verwenden Sie einzelne Zitate, wo Schlüssel Platz haben.

laufen unten.

 db.gameItems.find({'weapon name 1':{$exists:1}}) 
+0

Ich machte einen Fehler in meinem OP. Überprüfen Sie die Bearbeitung für die Korrektur – Garuuk

+0

db.gameItems.find ({items.'weapon name 1 ': {$ exists: 1}}) –

+0

Das hat @sandeep nicht funktioniert – Garuuk

Verwandte Themen