Heim > Web-Frontend > js-Tutorial > Hauptteil

Aggregieren Sie die Implementierungsschritte für Kaskadenabfragen

php中世界最好的语言
Freigeben: 2018-05-10 14:15:05
Original
2064 Leute haben es durchsucht

Dieses Mal werde ich Ihnen die Schritte zum Implementieren einer aggregierten Kaskadenabfrage vorstellen. Was sind die Vorsichtsmaßnahmen für die Implementierung einer aggregierten Kaskadenabfrage?

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
        }));
      })
    });
};
Nach dem Login kopieren

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 } ]
Nach dem Login kopieren

Ich glaube, Sie haben es gemeistert Nachdem Sie den Fall in diesem Artikel „Methode“ gelesen haben, lesen Sie bitte andere verwandte Artikel auf der chinesischen PHP-Website, um weitere spannende Informationen zu erhalten!

Empfohlene Lektüre:

Detaillierte Erläuterung der Schritte zum Hinzufügen von Ereignissen zu dynamisch erstellten Elementen mithilfe von JS

vue lädt Bilder hoch zur Datenbank auf der Frontend-Seite Anzeigen

Das obige ist der detaillierte Inhalt vonAggregieren Sie die Implementierungsschritte für Kaskadenabfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!