MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment faire une agrégation MongoDB dans Node.js

Le problème probable ici est que votre userid la valeur n'est pas réellement un ObjectID correct type lorsqu'il est passé dans le pipeline. Il en résulte que rien n'est "correspondant" à l'étape initiale.

Donc comme exemple plus complet :

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectID = require("mongodb").ObjectID;

mongoose.connect("mongodb://localhost/test");

friendSchema = new Schema({
  "name": String,
  "status": Number
});

memberSchema = new Schema({
  friends: [friendSchema]
});

var Member = mongoose.model("Members", memberSchema );

var userid = new ObjectID("537ec520e98bcb378e811d54");

console.log( userid );

Member.aggregate([
  { "$match": { "_id": userid } },
  { "$unwind": "$friends" },
  { "$match": { "friends.status": 0 } }],
  function( err, data ) {

    if ( err )
      throw err;

    console.log( JSON.stringify( data, undefined, 2 ) );

  }
);

Qui correspondra alors aux données comme prévu :

[
  {
    "_id": "537ec520e98bcb378e811d54",
    "friends": [{
      "name": "Ted",
      "status": 0
    }]
  }
]

Veillez donc à vous assurer qu'il s'agit du bon type. La méthode d'agrégation n'enveloppe pas automatiquement une valeur de chaîne telle que "537ec520e98bcb378e811d54" dans un ObjectID tapez quand il est mentionné dans une étape de pipeline par rapport à _id de la même manière que Mongoose le fait avec d'autres méthodes de recherche et de mise à jour.