Cosmos DB: запрос сортировки MongoDB возвращает пустой набор результатов

Я использую 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 }
});

Я выполняю следующий запрос мангуста -

UserSchema.find ({роль: options.role}) .select (options.select) .sort ({'email': -1}) .exec (cb);

В идеале это должно возвращать список подходящих пользователей, отсортированный по идентификатору электронной почты. Запрос работает именно так, как ожидается, в нашем развертывании AWS. Но на хостинге Cosmos DB MongoDB он возвращает пустой набор результатов. Но запрос возвращает результаты (но не в желаемом порядке) при удалении .sort ({'email': -1}).


person Sourav Ray    schedule 09.08.2017    source источник
comment
Вы пробовали просто передать '-email' в качестве параметра сортировки?   -  person David Makogon    schedule 09.08.2017
comment
Вы выбрали правильное индексирование диапазона для электронного письма? Вы не можете выполнять сортировку строк без соответствующей настройки точности   -  person Jesse Carter    schedule 09.08.2017


Ответы (2)


как обсуждалось в отдельном потоке, это действительно работает. Ниже приведен полный пример кода, показывающий, как сортировка работает должным образом с CosmosDB и Mongo API через Mongoose.

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);
});
person Marc Gagne    schedule 09.08.2017

Я использую документ Cosmos Db, у меня такая же проблема со строковым полем. Проблема в том, что когда я создаю коллекцию, по умолчанию policyIndex было

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

Тип хэша не подходит для порядка, измените его на Range и работает хорошо

{
                    "kind": "Range",
                    "dataType": "String",
                    "precision": -1
                },
person Grey Wolf    schedule 29.12.2017