Heim  >  Artikel  >  Web-Frontend  >  Beispiel für eine Aggregatkaskadenabfrageoperation mit nodejs+mongodb

Beispiel für eine Aggregatkaskadenabfrageoperation mit nodejs+mongodb

亚连
亚连Original
2018-05-29 16:36:082304Durchsuche

In diesem Artikel wird hauptsächlich die Aggregatkaskadenabfrageoperation von nodejs + mongodb vorgestellt und die Betriebsfähigkeiten im Zusammenhang mit der Kaskadenabfrage der mongodb-Datenbank anhand von Beispielen analysiert >Die Beispiele in diesem Artikel werden durch den Aggregatkaskaden-Abfragevorgang von nodejs+mongodb erläutert. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Ich habe kürzlich ein NodeJS + Mongoose-Projekt abgeschlossen und bin auf die Kaskadenabfrageoperation von Mongodb gestoßen. Die Situation besteht darin, eine Rangliste zu implementieren, um die zehn Personen anzuzeigen, die unter den Kunden eines bestimmten Unternehmens (Organisation) die gültigsten Artikel veröffentlicht haben.

Kontotabelle: Firmeninformationen werden in einer separaten Kontotabelle gespeichert.

var AccountSchema = new Schema({
  loginname: {type: String},
  password: {type: String},
  /**
   * 联系方式
   */
  //账户公司名
  comName: {type: String},
  //地址
  address: {type: String},
  //公司介绍
  intro: {type: String}
});
mongoose.model('Account', AccountSchema);

Kundentabelle: Der Kundenstamm des Unternehmens.

var CustomerSchema = new Schema({
  /**
   * 基本信息
   */
  //密码
  password: {type: String},
  //归属于哪个Account
  belongToAccount: {type: ObjectId, ref: 'Account'},
  //手机号,登录用
  mobile: {type: String},
  //真实姓名
  realname: {type: String}
});
CustomerSchema.index({belongToAccount: 1, mobile: 1}, {unique: true});
mongoose.model('Customer', CustomerSchema);

Artikeltabelle

var articleSchema= new Schema({
  belongToAccount: {type: ObjectId, ref: 'Account'},
  title: {type: String},
  text: {type: String},
  createTime: {type: Date, default: Date.now},
  author: {type: ObjectId, ref: 'Customer'},
  //0,待确认,1 有效 ,-1 无效
  status: {type: Number, default: 0}
});
articleSchema.index({belongToAccount: 1, createTime:-1,author: 1}, {unique: false});
mongoose.model('article', articleSchema);

Was hier getan werden muss, ist, die Soft-Artikel nach AccountId → Aggregat → Kaskadenautor zu sortieren, um den Namen des Autors und andere Informationen zu finden.

Der Code lautet wie folgt:

exports.getRankList = function (accountid, callback) {
  AticleModel.aggregate(
    {$match: {belongToAccount: mongoose.Types.ObjectId(accountid), status: 1}},
    {$group: {_id: {customerId: "$author"}, number: {$sum: 1}}},
    {$sort: {number: -1}}).limit(10).exec(function (err, aggregateResult) {
    if(err){
      callback(err);
      return;
    }
      var ep = new EventProxy();
      ep.after('got_customer', aggregateResult.length, function (customerList) {
        callback(null, customerList);
      });
       aggregateResult.forEach(function (item) {
        Customer.findOne({_id: item._id.customerId}, ep.done(function (customer) {
          item.customerName = customer.realname;
          item.customerMobile=cusomer.mobile;
          // do someting
          ep.emit('got_customer', item);
        }));
      })
    });
};

Das zurückgegebene Ergebnisformat (hier gibt es nur zwei Datensätze, eigentlich die Top Ten):

[ { _id: { customerId: 559a5b6f51a446602032fs21 }, number: 5,
customerName: 'test2',
mobile:22 } ,
{ _id: { customerId: 559a5b6f51a446602041ee6f }, number: 1,
customerName: 'test1',
mobile: 11 } ]

Das Obige habe ich zusammengestellt für alle, ich hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

Überprüfung des E-Mail-Adressformats in JavaScript

So führen Sie Symbolsymbole in Vue-Projekten ein

Detaillierte Erläuterung der Vue.js-Implementierung des konfigurierbaren Anmeldeformularcodes

Das obige ist der detaillierte Inhalt vonBeispiel für eine Aggregatkaskadenabfrageoperation mit nodejs+mongodb. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn