2016-07-14 3 views
3

Ich muss eine Liste der Objekt-IDs durchlaufen, einen Benutzer suchen, und ändern Sie dann das JSON-Objekt und geben Sie es zurück.Notwendigkeit, JSON zu ändern und innerhalb Aync Find-Vorgang

Ich habe in Bluebird untersucht, aber der Code unten führt nicht aus, wie ich es möchte. Es scheint, als ob das Ändern des JSON-Objekts nach dem Zurückgeben erfolgt.

Ich habe versucht, user["test"] = "lol" zurückgeben, aber das gibt nur den Wert von "test", während ich die gesamte aktualisierte JSON benötigt.

Promise.map(['5781635026d6fad4486d81e9', '578296e31029e27b4ea53e9d'], function(i) { 
    return User.findOneAsync({ 
    _id: i 
    }).then(function(user) { 
    user["test"] = "lol"; 
    return user; 
    }); 
}).then(function(array) { 
    res.send(array); 
}) 

Gibt es eine elegante Lösung?

+0

zeigen Bitte den Inhalt von 'array' und' user'. In Code, den Sie gezeigt haben, wäre das 'Array' ein Array, das die zurückgegebenen' user' Objekte enthält. Abgesehen davon ist JSON eine Zeichenfolge, Sie sprechen über JavaScript-Objekt. –

+0

Das Array enthält nur die Benutzerobjekte ohne die Änderungen. – james

+0

Was ist der Inhalt von 'user' nach' user ["test"] = "lol"; '? Platziere eine 'console.dir (user);' direkt nach 'user [" test "] =" lol ";'. –

Antwort

3

Ein einfacher Ansatz Sie nehmen könnte, ist die $in Operator mit dem Array von IDs in Ihrer Abfrage zu verwenden, dann gelten die lean() Methode Ebene JS Objekte als Mongoose documents zurückzukehren erlauben nicht von Eigenschaften hinzufügen.

Schauen Sie sich dieses Beispiel:

User.find({ "_id": { "$in": ['5781635026d6fad4486d81e9', '578296e31029e27b4ea53e9d'] } }) 
    .lean() 
    .exec() 
    .then(function(docs) { 
     var users = docs.map(function(user) { 
      user["test"] = "lol"; 
      return user; 
     }); 
     res.send(users); 
    }) 
+0

Nur aus Neugier wissen Sie, wie das Objekt geschützt ist? Und warum geben sie 'true' für' Object.isExtensible (user) 'zurück? –

+0

@ t.niese Nicht wirklich sicher, aber weil Mongoose-Dokumente Instanzen des Mongoose-Modells sind und daher das Hinzufügen von Eigenschaften nicht zulassen – chridam

Verwandte Themen