【问题标题】:Cosmos DB: MongoDB sort query returning blank resultsetCosmos DB:MongoDB 排序查询返回空白结果集
【发布时间】:2017-12-29 12:10:43
【问题描述】:

我正在使用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({ '电子邮件': -1 }) .exec(cb);

理想情况下,这应该返回按电子邮件 ID 排序的匹配用户列表。该查询的工作方式与我们在 AWS 部署中的预期工作方式完全相同。 但在 Cosmos DB MongoDB 托管中,它返回的是空结果集。但是当 .sort({ 'email': -1 }) 被删除时,查询会返回结果(但不是按所需的顺序)。

【问题讨论】:

  • 您是否尝试过将'-email' 作为排序参数传递?
  • 您是否为电子邮件选择了适当的范围索引?如果不适当设置精度,就无法对字符串进行排序

标签: node.js mongodb azure mongoose azure-cosmosdb


【解决方案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);
});

【讨论】:

    【解决方案2】:

    我正在使用 Cosmos Db 文档,与字符串字段有相同的问题。 问题是当我创建集合时,policyIndex 默认是

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

    Hash Type 不利于排序,改成 Range 就好了

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

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 2017-12-19
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2021-03-18
      相关资源
      最近更新 更多