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

Sådan MongoDB aggregering i Node.js

Det sandsynlige problem her er, at dit userid værdi er faktisk ikke et korrekt ObjectID type, når den føres ind i rørledningen. Dette resulterer i, at intet bliver "matchet" i den indledende fase.

Derfor som et mere komplet eksempel:

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

  }
);

Som så vil matche data som forventet:

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

Så vær omhyggelig med at sikre, at dette er af den rigtige type. Den samlede metode ombryder ikke automatisk en strengværdi såsom "537ec520e98bcb378e811d54" i et ObjectID type, når det er nævnt i et pipeline-stadium mod _id på den måde, som Mongoose gør dette med andre find- og opdateringsmetoder.




  1. Næste stop – Opbygning af en datapipeline fra Edge til Insight

  2. Bliver jeg overopkrævet af Azure Cosmo DB til 45 MB database?

  3. Skift en boolesk værdi med mongoDB

  4. elemMatch kombineret med andre forespørgselsfelter i Mongoose