2017-08-09 59 views
2

我正在使用Mongoose.js 4.11.6 Node.js 6.0。Cosmos DB:MongoDB排序查詢返回空白結果集

我有一個用戶文件,它看起來像波紋管 -

var UserSchema = new Schema({ 
    name: { type: String, default: '' }, 
    email: { type: String, default: '' }, 
    phone: { type: String, default: '' }, 
    hashed_password: { type: String, default: '' }, 
    role: { type: String, default: '' }, 
    created_at: { type: Date, default: Date.now } 
}); 

我正在下面獴查詢 -

UserSchema.find({角色:options.role}) 。選擇( options.select) .sort({'email':-1}) .exec(cb);

理想情況下,這應該返回列表匹配用戶通過電子郵件ID排序的用戶。查詢的工作原理與我們在AWS部署中所期望的完全相同。 但在承載它的Cosmos DB MongoDB中返回空結果集。但是,當.sort({'email':-1})被刪除時,查詢返回結果(但不是按照期望的順序)。

+0

你試過只是過客''-email''作爲排序參數? –

+0

您是否選擇了適當的郵件範圍索引?如果沒有適當地設置精度,你不能對字符串進行排序 –

回答

1

正如在一個單獨的線程中討論的,這確實有效。下面是完整的示例代碼,顯示按照預期通過Mongoose通過CosmosDB & Mongo API進行排序。

https://gist.github.com/m-gagne/00893a32a0e4c7f593a1676ba1380e63

var mongoose = require('mongoose'); 

mongoose.connect('<COSMOS DB CONNECTION STRING>'); 

var Schema = mongoose.Schema; 

var userSchema = new Schema({ 
    email: { type: String, default: '' }, 
}); 

var User = mongoose.model('User', userSchema, "users"); 

User.find({}).select(['email']).sort({ 'email': -1 }).exec(function(err, results) { 
    if(err) { 
    console.log("!!! ERROR !!!"); 
    console.log(err); 
    return; 
    } 
    console.log(results); 
}); 
0

我使用宇宙Db的文件,有串場同樣的問題。 問題是,當我創建的收集,policyIndex默認是

{ 
        "kind": "Hash", 
        "dataType": "String", 
        "precision": 3 
       } 

哈希類型是不好的秩序,將其更改爲範圍,運作良好

{ 
        "kind": "Range", 
        "dataType": "String", 
        "precision": -1 
       },