【发布时间】: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