2017-12-19 6 views
0

Ich kenne die ID des Benutzers, und ich möchte wissen, ob sie einen Wert in ihrer Einkaufsliste haben, der "name" = "foo" entspricht. Hier ist meine aktuelle Abfrage, aber es gibt Ergebnis zurück, obwohl der Name nicht existiert, nehme ich an, da einer der Werte existiert. Wie kann ich es nur Ergebnis zurückgeben, wenn beide Werte wahr sind?Ermitteln, ob ein Wert im eingebetteten Dokumentarray des Benutzers existiert

User.findOne({"_id": req.user._id},{"groceryList": {"$elemMatch": {"name": ingredients.name[i]}}}, function(err, result) { 
     if(err) { 
       console.log(err); 
      } 
      else if(result) { 
       console.log(result); 
      } 
    }) 

Benutzer Schema:

var groceryListSchema = mongoose.Schema({ 
quantity: { type: Number, required: true }, 
measurement: { type: String, required: true }, 
name: { type: String, required: true } 
}); 

var userSchema = new mongoose.Schema({ 
username: String, 
password: String, 
recipes: [ 
    { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Recipe' 
    } 
], 
groceryList: { 
type: [ groceryListSchema ] 
} 
}); 
+0

Try 'User.findOne ({_ id: user_id "groceryList.name": "foo"})'. '$ elemMatch' könnte etwas übertrieben sein, da Sie nur versuchen, das eine Feld zu finden. Darüber hinaus erwartet 'findOne' ein einzelnes Argument. Wenn Sie also die ursprüngliche Abfrage verwenden möchten, müssen Sie die beiden Objekte zu einem einzigen Argument zusammenführen. –

Antwort

1

das zweite Argument sollte ein Teil der Anfrage sein.

User.findOne({"_id": req.user._id, "groceryList": {"$elemMatch": {"name": ingredients.name[i]}}}) 

und wie oben ausgeführt es einfacher sein würde zu schreiben:

Users.findOne({"_id": req.user._id, "groceryList.name": ingredients.name[i] }) 
Verwandte Themen