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);
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);
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);
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); })); }) }); };
[ { _id: { customerId: 559a5b6f51a446602032fs21 }, number: 5, customerName: 'test2', mobile:22 } , { _id: { customerId: 559a5b6f51a446602041ee6f }, number: 1, customerName: 'test1', mobile: 11 } ]
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!