我想做一個查詢使用遠程網格,所以我將不得不在每個字段上處理排序(asc,desc)。節點 - 貓鼬3.6 - 排序查詢與填充字段
下面是模式:
var customerSchema = new mongoose.Schema({
status: {type: mongoose.Schema.Types.ObjectId, ref: 'Status'},
contact: {type: mongoose.Schema.Types.ObjectId, ref: 'Contact'}
}, { collection: 'Customer' });
customerSchema.virtual('contactName').get(function() {
if (this.contact && this.contact.get) {
return this.contact.get('firstName') + ' ' + this.contact.get('lastName');
}
return '';
});
customerSchema.virtual('statusName').get(function() {
if (this.status && this.status.get) {
return this.status.get('name');
}
return '';
});
customerSchema.set('toJSON', { virtuals: true });
customerSchema.set('toObject', { virtuals: true });
mongoose.model('Customer', customerSchema);
// STATUS
var statusSchema = new mongoose.Schema({}, { collection: 'Status' });
mongoose.model('Status', statusSchema);
// CONTACT
var contactSchema = new mongoose.Schema({
firstName: String,
lastName: String
}, { collection: 'Contact' });
mongoose.model('Contact', contactSchema);
,這裏是查詢:
exports.customerList = function (predicate ,callback){
if (!predicate) predicate = 'name';
var Customers = mongoose.model('Customer');
Customers.find()
.select('name phone address status contact contactName statusName')
.populate('status', 'name')
.populate('contact', 'firstName lastName')
.sort(predicate)
.exec(callback);
};
在 '名稱'(所以Customer.name)或 '地址'(排序當查詢工作Customer.address),但無法讓它在'contact.firstName'(應該是Customer.contact.firstName)時工作。
中填入fonction的第四個參數是一個選擇對象至極可以有一個排序的對象,但是這樣做:
.populate('contact', 'firstName lastName', null, { sort {'firstName': 1}})
不工作(似乎排序聯繫人列表中的用戶)。
我完全是貓鼬(和mongo)的新手。我正試圖將一個rails projets移植到node/express。
有沒有辦法可以通過contact.firstName來排序我的查詢?
謝謝!
編輯:我最終做了手動排序(Array.sort),但我真的不喜歡這個解決方案。排序是同步的,所以它阻止node.js主線程(糾正我,如果我錯了)。
有什麼我不明白?排序數據集對我來說是一個數據庫問題,而不是應用程序......我對將我的rails應用程序轉換爲node.js抱有很大希望,但似乎有些標準操作(分頁網格)實際上很難實現!
因此,在mongo風格下做到這一點的唯一方法是將我的聯繫人放入客戶集合(Customer.contact = {})中?是node.js和例如mySql有很好的集成嗎?有沒有好的辦法來處理它? – Doum
@Doum對,或者像你一樣在你自己的代碼中排序。我沒有使用MySQL與node.js,但也許開始[這裏](http://stackoverflow.com/questions/5818312/mysql-with-node-js)。 – JohnnyHK
我可能太習慣於使用關係數據庫......如果我選擇將聯繫人嵌入到客戶(customer.contact = {})中,是否有辦法在以後獲取所有聯繫人而無需獲取所有客戶?這樣做沒有性能問題?例如,客戶將擁有一個項目列表,如果我嵌入它們(customer.projetcs = [])並且想要列出我的應用程序中的所有項目,我將不得不像Customer.find()那樣執行並獲取每個客戶只是爲了得到他們的項目列表... – Doum