带有 MongoDB API 的 CosmosDB

Posted

技术标签:

【中文标题】带有 MongoDB API 的 CosmosDB【英文标题】:CosmosDB with MongoDB API 【发布时间】:2018-03-02 11:43:48 【问题描述】:

您好,我是 MongoDB 和 CosmosDB 的新手,我在 c# 中尝试这样做

MongoClientSettings settings = MongoClientSettings.FromUrl(
                      new MongoUrl(connectionString)
                    );
                    settings.SslSettings =
                      new SslSettings()  EnabledSslProtocols = SslProtocols.Tls12 ;    
    var mongoClient = new MongoClient(settings);
    var mongoDatabase = mongoClient.GetDatabase("MYDATABASE");
    var mongoCollection = mongoDatabase.GetCollection<BsonDocument>("MYCOLLECTION");

    var builder = Builders<BsonDocument>.Filter;            
    var filter = builder.Lt("mac", "001BC50670101BB8") & builder.Gte("date", "2016-09-18T00:00:00Z") & builder.Gte("date", "2017-09-22T00:00:00Z");

    var query = mongoCollection.Find<BsonDocument>(filter).ToList<BsonDocument>();

但是当它在服务器上运行查询时,我得到了这个错误:

Errors":["An invalid query has been specified with filters against path(s) that are not range-indexed. Consider adding allow scan header in the request."

我发现我应该在我的请求中添加“x-ms-documentdb-query-enable-scan”标头。但是我该怎么做呢?

【问题讨论】:

也许 Mongo 不知道小于 001BC50670101BB8 的内容是什么? 哦...该死的。谢谢它应该是eq并解决了问题 现在可以用了吗? 是的,是查询中的错误,谢谢 我会将其作为答案发布,以便我们结束问题。 【参考方案1】:

在评论区找到解决方案:

查询更改自

builder.Lt("mac", "001BC50670101BB8")

builder.Eq("mac", "001BC50670101BB8")

【讨论】:

以上是关于带有 MongoDB API 的 CosmosDB的主要内容,如果未能解决你的问题,请参考以下文章

用于 MongoDB API 的分片密钥和 Azure CosmosDB

CosmosDB MongoDB API:新查询被隐藏

CosmosDB mongoDB API 排序和全文搜索抛出错误

Azure CosmosDB (11) MongoDB概念

将Cosmos DB模拟器(MongoDB API)迁移到Azure时发生致命错误

CosmosDB - Mongodb IsUpsert 不适用于批量更新