MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Moongoose 3.8.8 supporta $position operator?

Questo in realtà non ha importanza e non ha mai importanza per qualsiasi implementazione "quadro" e non mi dispiace spiegare perché.

Ogni singolo "framework" (come Mongoose, Mongoid, Doctrine, MongoEngine, ecc, ecc, ecc) è fondamentalmente costruito su un'implementazione "driver" di base che nella maggior parte dei casi è stata sviluppata dallo staff di MongoDB stesso. Quindi la funzionalità di base è sempre presente anche se è necessario "scavare" un livello per utilizzare quei metodi "nativi".

Quindi ecco l'esempio di utilizzo nativo in questo caso:

List.collection.update(
{},
{ "$push": {
    "list": {
      "$each": [ 1, 2, 3 ],
      "$position": 0 }
    }
},function(err,NumAffected) {
  console.log("done");

});

Nota il metodo di "raccolta" utilizzato dal modello, che ottiene i dettagli di raccolta "grezzi" dal driver. Quindi stai usando il suo metodo e non un metodo "avvolto" che potrebbe eseguire ulteriori elaborazioni.

Il motivo successivo e più basilare è che se non riesci a trovare il metodo e l'applicazione degli operatori di cui hai bisogno, qui è un fatto semplice.

Ogni singola operazione utilizzata dai metodi in ogni framework e metodo di base del driver è essenzialmente una chiamata al metodo "runCommand" nell'API di base. Quindi, poiché quella chiamata di base è disponibile ovunque (in una forma o nell'altra, perché deve esserlo), puoi fare tutto ciò che trovi pubblicizzato sul sito MongoDB con ogni implementazione di lingua su qualsiasi struttura.

Ma la chiamata breve alla tua richiesta particolare lo è, poiché questo non è in realtà un metodo call ma fa semplicemente parte degli argomenti BSON passati, quindi ovviamente non c'è alcuna restrizione da parte di un particolare driver di lingua per usarlo effettivamente.

Quindi puoi usare questi nuovi argomenti senza ovviamente aggiornare alla versione più recente. Ma probabilmente otterrai dei buoni metodi per farlo se lo fai davvero.