sql >> Databáze >  >> NoSQL >> MongoDB

Jak na agregaci MongoDB v Node.js

Pravděpodobným problémem je zde vaše userid hodnota ve skutečnosti není správné ObjectID typu, když je předáván do potrubí. To má za následek, že se v počáteční fázi nic „nevyrovná“.

Proto jako úplnější příklad:

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

  }
);

Což pak bude odpovídat datům podle očekávání:

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

Buďte tedy opatrní, abyste se ujistili, že se jedná o správný typ. Agregační metoda automaticky nezabalí hodnotu řetězce, jako je „537ec520e98bcb378e811d54“ do ObjectID zadejte, když je zmíněn ve fázi kanálu proti _id způsobem, jakým to Mongoose dělá s jinými metodami hledání a aktualizace.




  1. mongoose 'findById' vrátí hodnotu null s platným ID

  2. Zobrazte všechna data pocházející z mongodb a vykreslete je v šabloně doT.js

  3. Node.js Mongoose .update s ArrayFilters

  4. Co to znamená umístit pracovní sadu do paměti RAM pro MongoDB?