Heim >Web-Frontend >js-Tutorial >Aggregieren Sie die Implementierungsschritte für Kaskadenabfragen
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:
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!