我正在使用Mongoose.js 4.11.6 Node.js 6.0。
我有一个看起来像波纹管的用户文档 -
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 }
});
我正在运行以下mongoose查询 -
UserSchema.find({role:options.role})。select(options.select).sort({'email': - 1})。exec(cb);
理想情况下,这应该返回按电子邮件ID排序的列表匹配用户。该查询完全符合我们在AWS部署中的预期。但在Cosmos DB MongoDB托管中它返回空结果集。但是当.sort({'email': - 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);
});
我正在使用Cosmos Db文档,与字符串字段有相同的问题。问题是当我创建集合时,policyIndex默认为
{
"kind": "Hash",
"dataType": "String",
"precision": 3
}
哈希类型不适合订单,将其更改为范围并且运行良好
{
"kind": "Range",
"dataType": "String",
"precision": -1
},