Cosmos DB 应用按字段排序会删除所有没有该字段的文档
CosmoDB applying a sort by field removes all documents that do not have that field
我们正在使用 Mongo API 从 mongoDB 迁移到 CosmoDB。
我们在围绕排序的查询行为中遇到了以下差异。
使用 CosmoDB mongo API 按字段排序会删除所有没有该字段的文档。是否可以修改查询以包含空值以复制 mongo 行为?
例如,如果我们有以下 2 个文档
[{
"id":"p1",
"priority":1
},{
"id":"p2"
}]
表演:
sort({"priority":1})
cosmoDB 将 return 单个结果 'p1'.
mongo 将 return 两个结果按 'p2'、'p1' 的顺序排列,空文档将排在第一位。
据我所知,空值不会包含在查询结果排序扫描中。
这里有一个解决方法,您可以在排序方法中设置一个不存在的字段来强制引擎扫描所有数据。
像这样:
db.getCollection('brandotestcollections').find().sort({"test": 1, "aaaa":1})
结果是这样的:
我遇到了同样的问题,阅读后解决了
Refer the document...
您必须更新容器的索引策略才能更改 Cosmos DB 的默认排序方式!
我们正在使用 Mongo API 从 mongoDB 迁移到 CosmoDB。 我们在围绕排序的查询行为中遇到了以下差异。
使用 CosmoDB mongo API 按字段排序会删除所有没有该字段的文档。是否可以修改查询以包含空值以复制 mongo 行为?
例如,如果我们有以下 2 个文档
[{
"id":"p1",
"priority":1
},{
"id":"p2"
}]
表演:
sort({"priority":1})
cosmoDB 将 return 单个结果 'p1'.
mongo 将 return 两个结果按 'p2'、'p1' 的顺序排列,空文档将排在第一位。
据我所知,空值不会包含在查询结果排序扫描中。
这里有一个解决方法,您可以在排序方法中设置一个不存在的字段来强制引擎扫描所有数据。
像这样:
db.getCollection('brandotestcollections').find().sort({"test": 1, "aaaa":1})
结果是这样的:
我遇到了同样的问题,阅读后解决了 Refer the document... 您必须更新容器的索引策略才能更改 Cosmos DB 的默认排序方式!