请参阅下面的文件结构(在“文件集”标题下)。 我想写一个查询,它会根据需求时间给我文档,并过滤掉已经对给定时间有所需要的资源,并为我提供给定需求的可用资源(仅基于时间)。每个资源都有一个需求时间的需求数组。
基本上,我们需要满足需求数组中每个子文档的以下条件的文档。
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。任何替代解决方案都会非常有用。
由于
答案 0 :(得分:1)
CosmosDB不是MongoDB 。它们是由两个独立公司(MongoDB Inc.的MongoDB和Microsoft的CosmosDB)创建的两个独立产品。
尽管CosmosDB尝试提供类似MongoDB的查询语法,但它们并不相同,可能会产生不同的结果,这在您的体验中很明显。
如果您通过查询真正的MongoDB服务器获得正确的数据,我认为您的查询没有任何问题。
如果您发现CosmosDB给出了错误的结果,那么最好的做法是: