2016-09-03 2 views
0

Ich habe zwei "Dokumente", die ich in meine MongoDB-Datenbank eingefügt habe.Basic MongoDb Retrieval

questionsList.insert({question: "When was the War of 1812", answer: "1812", answers: ["1811", "1812", "1813", "1814"]}) 

questionsList.insert({question: "What year did the US land on the moon?", answer: "1969", answers: ["1969", "1970", "1971", "1972"]}) 

Ich möchte einfach auf den Antwortwert aus dem zweiten Dokument zugreifen. Ich habe die Dokumentation gelesen und es scheint nicht zu funktionieren. Ich kann den Antwortwert aus dem ersten Dokument ohne Problem abrufen: var str = questionsList.findOne({}, {question: 1}).answer; Ich nehme an, dass, da ich findOne verwende, ich keine anderen Übereinstimmungen finden kann. Das Problem ist, dass ich das zweite Dokument und seine entsprechende Antwort anscheinend nicht hochziehen kann. Ich habe viele verschiedene Möglichkeiten ausprobiert:

questionList.find({}, {answer: 1}) 
questionList.find({answer: 1}) 
questionList.find({}).answer 

Mein Ziel ist es, diese Antwort mit einem der Klick eine Antwort von choices zu vergleichen Was bin ich fehlt?

Antwort

1

Wenn ich Ihr Szenario richtig verstanden habe, versuchen Sie, ein Dokument basierend auf dem Dokumentenindex abzurufen (was nicht richtig ist, da MongoDB Dokumente nicht in einer bestimmten Reihenfolge speichert).

Der Grund, warum findOne funktioniert, ist, weil es nur das erste Dokument in Ihrer Sammlung zurückgibt.

Was ich glaube, dass Sie stattdessen tun sollten, ist die Antwort basierend auf der Frage abrufen.
Etwas wie:

db.questionsList.find({question:"What year did the US land on the moon?"},{answer:1}) 

Update: Im Fall von meteor.js

questionsList.find({question:"What year did the US land on the moon?"}).fetch()[0].answer 

Der Grunde Molke wir geben müssen [0] fetch() gibt einen Array von Objekten.

+0

scheint auf das richtige Dokument zu zeigen. Aber ich suche nach einer Möglichkeit, den Wert der Antwort zu referenzieren, nicht das gesamte Objekt. Ich hätte erwähnen sollen, dass ich auch Meteor benutze. Wenn ich fetch hinzufüge, verweist dies immer noch auf das gesamte Objekt. – Matty

+0

@Matty haben die Antwort aktualisiert –

0

Der letzte Schritt (Da es können mehrere Dokumente mit dem gleichen Schlüssel) ist:

questionsList.find({"question": "You are human"}, {"answer": 1}).fetch()[0].answer 

wir ihn als jedes andere Objekt behandeln (dh die erste innerhalb einer Liste von Objekten und mit Punktnotation)