sql >> Database >  >> NoSQL >> MongoDB

Hoe MongoDB-aggregatie in Node.js

Het waarschijnlijke probleem hier is dat uw userid waarde is niet echt een correcte ObjectID type wanneer het wordt doorgegeven aan de pijplijn. Dit heeft tot gevolg dat er niets wordt "gematcht" in de beginfase.

Daarom als vollediger voorbeeld:

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 ) );

  }
);

Die dan overeenkomen met de gegevens zoals verwacht:

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

Zorg er dus voor dat dit van het juiste type is. De aggregatiemethode verpakt een tekenreekswaarde zoals "537ec520e98bcb378e811d54" niet automatisch in een ObjectID type wanneer het wordt vermeld in een pijplijnfase tegen _id op de manier waarop Mongoose dit doet met andere zoek- en updatemethoden.




  1. Wat zijn de gevolgen van het uitschakelen van roddels, vermenging en hartslag voor selderijwerkers?

  2. Hoe kan ik de momenteel geverifieerde gebruiker-principal krijgen met lentebeveiliging en Redis in de lente-opstarttoepassing?

  3. Hoe resque-werknemers in te zetten in productie?

  4. Mongodb TTL verloopt documenten vroegtijdig