MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Kann der Meteor-Mongo-Treiber die Operatoren $each und $position verarbeiten?

Wenn Sie eine Meteor-Sammlung mit new Mongo.Collection('col') erstellen Sie erhalten eine Minimongo-Instanz zurück, die nicht der native Node MongoDriver ist, oder?

Daher funktionieren einige Methoden einfach nicht oder werden nicht vollständig unterstützt, z. B. collection.aggregate

Aber Sie können auf den nativen Treiber einfach über Col.rawCollection() zugreifen und führen Sie Ihre Abfrage direkt auf der nativen Instanz aus. Die native Instanz ist natürlich nur auf dem Server erreichbar .

Um also zu tun, was Sie wollen, haben Sie mehrere Möglichkeiten, zum Beispiel könnten Sie zuerst das Array nehmen, es nach Belieben umsortieren und

$set: {my_array: sortedArray } Persönlich würde ich diesen Weg bevorzugen, da Sie nur einen Update-Vorgang statt zwei durchführen müssen ($pull &$push at $position )

Aber wenn Sie es auf die $push at $position-Weise machen wollen, tun Sie es einfach mit dem nativen Treiber

var col = Collection.rawCollection();
var result = Meteor.wrapAsync(col.update.bind(col)(
  /* update query goes here */
);

Hinweis:Sie benötigen Meteor.wrapAsync wegen des Meteor-Synchronisierungsstils, Sie könnten es auch ohne machen. Collection.rawCollection().update(...)