【问题标题】:Differences in local MongoDb vs CosmosDb query execution本地 MongoDb 与 CosmosDb 查询执行的差异
【发布时间】:2018-11-07 17:49:12
【问题描述】:

请参阅下面的文档结构(在“文档收集”标题下)。 我想编写一个查询,它会根据需求时间为我提供文档,并过滤掉已经对给定时间有需求的资源,并为我提供给定需求的可用资源(仅基于时间)。每个资源都有一个带有需求时间的需求数组。

基本上,对于需求数组中的每个子文档,我们都需要满足以下条件的文档。

startTime: {$gte: demand.EndTime}, endTime: {$lte: demand.StartTime}

因此,找不到任何合适的运算符,我决定反转“不匹配”文档的结果

为了简单起见,我为 MongoDb 和 CosmosDb 创建了以下需求要求和资源文档以及结果。

需求查询:

db.getCollection('try').
find(
    {"demands": 
        { $not: 
            {$elemMatch:
                { 
                    startTime: {$lt: 8}, endTime: {$gt: 6}  //startTime: {$lt: demand.endTime}, endTime: {$gt: demand.startTime}
                }
            }
        }
    }
)

文件收集

文档1:

{
    "_id" : 10439090,
    "demands" : [ 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 10,
            "endTime" : 20
        }, 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 30,
            "endTime" : 40
        }, 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 5,
            "endTime" : 9
        }, 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 80,
            "endTime" : 90
        }
    ]
}

文档2:

{
    "_id" : 10439091,
    "demands" : [ 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 111,
            "endTime" : 211
        }, 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 50,
            "endTime" : 80
        }, 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 20,
            "endTime" : 30
        }, 
        {
            "_id" : 1003,
            "name" : "Barclays Project",
            "startTime" : 80,
            "endTime" : 90
        }
    ]
}

本地 MongoDb 结果:仅 Doc2

CosmosDb 结果:Doc1 和 Doc2 都

为什么结果不同?有什么想法吗?

我可以理解的是,查询根本不适用于 CosmosDB。任何替代解决方案都会非常有帮助。

谢谢

【问题讨论】:

    标签: mongodb azure azure-cosmosdb


    【解决方案1】:

    CosmosDB 不是 MongoDB。它们是由两个不同的公司(MongoDB Inc. 的 MongoDB 和 Microsoft 的 CosmosDB)创建的两个独立的产品。

    尽管 CosmosDB 尝试提供类似 MongoDB 的查询语法,但它们并不相同,并且可能会产生不同的结果,这在您的经验中是显而易见的。

    如果您通过查询真实的 MongoDB 服务器获得正确的数据,我认为您的查询没有任何问题。

    如果您发现 CosmosDB 给出错误的结果,那么最好的做法是:

    1. 联系 Microsoft 支持并询问他们为什么给出不同的结果
    2. 部署您自己的 MongoDB 安装或使用托管的 MongoDB,例如Atlas

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2018-11-23
      • 2014-10-14
      相关资源
      最近更新 更多