Heim  >  Artikel  >  Web-Frontend  >  Aggregieren Sie die Implementierungsschritte für Kaskadenabfragen

Aggregieren Sie die Implementierungsschritte für Kaskadenabfragen

php中世界最好的语言
php中世界最好的语言Original
2018-05-10 14:15:052040Durchsuche

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

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 } ]

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!

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