Maison > interface Web > js tutoriel > le corps du texte

Exemple d'opération de requête en cascade agrégée nodejs + mongodb

亚连
Libérer: 2018-05-29 16:36:08
original
2296 Les gens l'ont consulté

Cet article présente principalement l'opération de requête en cascade globale nodejs+mongodb et analyse les compétences opérationnelles liées à la requête en cascade de base de données mongodb basée sur nodejs sous forme d'exemples. Les amis dans le besoin peuvent se référer à ce qui suit

Les exemples de cet article sont expliqués. Opération de requête en cascade agrégée nodejs+mongodb utilisée. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

J'ai récemment terminé un projet nodejs+mongoose et j'ai rencontré l'opération de requête en cascade de mongodb. La situation consiste à mettre en œuvre une liste de classement pour afficher les dix premières personnes qui ont publié les articles les plus valables parmi les clients d'une certaine entreprise (organisation).

Tableau des comptes : les informations sur l'entreprise sont stockées dans un tableau des comptes distinct.

var AccountSchema = new Schema({
  loginname: {type: String},
  password: {type: String},
  /**
   * 联系方式
   */
  //账户公司名
  comName: {type: String},
  //地址
  address: {type: String},
  //公司介绍
  intro: {type: String}
});
mongoose.model('Account', AccountSchema);
Copier après la connexion
Tableau clients : La clientèle de l’entreprise.

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);
Copier après la connexion
tableau des articles

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);
Copier après la connexion
Ce que nous devons faire ici est d'organiser et de trier les articles logiciels par ID de compte → agrégat → auteur en cascade pour trouver le nom de l'auteur et d'autres informations.

Le code est le suivant :

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);
        }));
      })
    });
};
Copier après la connexion
Le format du résultat renvoyé (il n'y a que deux enregistrements ici, en fait les dix premiers) :

[ { _id: { customerId: 559a5b6f51a446602032fs21 }, number: 5,
customerName: 'test2',
mobile:22 } ,
{ _id: { customerId: 559a5b6f51a446602041ee6f }, number: 1,
customerName: 'test1',
mobile: 11 } ]
Copier après la connexion
Ce qui précède C'est ce que j'ai compilé pour tout le monde, j'espère que cela sera utile à tout le monde à l'avenir.

Articles associés :

Vérification du format d'adresse e-mail en JavaScript

Comment introduire les icônes d'icônes dans les projets Vue

Explication détaillée de l'implémentation Vue.js du code du formulaire de connexion configurable

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!