Heim > Artikel > Web-Frontend > Beispiel für eine Aggregatkaskadenabfrageoperation mit nodejs+mongodb
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 JavaScriptSo führen Sie Symbolsymbole in Vue-Projekten einDetaillierte Erläuterung der Vue.js-Implementierung des konfigurierbaren AnmeldeformularcodesDas 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!