Azure cosmosdb Azure CosmosDB MongoDB如何查询:查询资源管理器

Azure cosmosdb Azure CosmosDB MongoDB如何查询:查询资源管理器,azure-cosmosdb,Azure Cosmosdb,我正在探索Azure CosmosDB,在理解如何查询我的收藏时遇到困难。我创建了一个web应用程序来添加和查询数据,但我想在Azure中搜索,不知道应该如何构造查询 当前,我查询正在运行的集合以返回所有内容 SELECT * FROM c 这将返回大量信息。下面是数据的示例 { "$t": 3, "$v": { "searchTerm": { "$t": 2, "$v": "test" }, "searc

我正在探索Azure CosmosDB,在理解如何查询我的收藏时遇到困难。我创建了一个web应用程序来添加和查询数据,但我想在Azure中搜索,不知道应该如何构造查询

当前,我查询正在运行的集合以返回所有内容

SELECT * FROM c
这将返回大量信息。下面是数据的示例

  {
    "$t": 3,
    "$v": {
      "searchTerm": {
        "$t": 2,
        "$v": "test"
      },
      "searchDate": {
        "$t": 9,
        "$v": 1501606675858
      },
      "_id": {
        "$t": 7,
        "$v": "Y³\u0013&Ò#\bø\u0005+ú"
      },
      "__v": {
        "$t": 16,
        "$v": 0
      }
    },
    "id": "NTk4MGIzMTMyNmQyMjMwOGY4MDUyYmZh",
    "_rid": "pR8YAPXxJQABAAAAAAAAAA==",
    "_self": "dbs/pR8YAA==/colls/pR8YAPXxJQA=/docs/pR8YAPXxJQABAAAAAAAAAA==/",
    "_etag": "\"020094b9-0000-0000-0000-5980b3130000\"",
    "_attachments": "attachments/",
    "_ts": 1501606672   }
有没有办法只查询某个“searchTerm”(我的CosmosDB中的一个字段)。我似乎无法掌握过滤查询的语法。我尝试了一些在SQL中似乎有意义的东西,但没有一个是有效的


谢谢您的帮助。

如您在评论中所述,您正在使用Mongoose,它是一种用于与Mongo交互的ORM。如果您使用Mongo API插入数据,您还需要使用Mongo API查询您的数据,因为它们是为支持此文档格式而构建的,带有所有的$符号

在Jesse的帮助下,我最终能够使用SQL“查询资源管理器”API实现查询

正如他所解释的,因为我使用的是MongoDb实例,所以我应该使用Mongo查询API,该API可以在Azure中通过进入“Data Explorer”->选择您的集合->新建Mongo查询来访问。从那里你可以用类似的东西搜索

{searchTerm: "test"}
它返回所有带有值测试的searchTerms

如何使用SQL查询资源管理器执行此操作

我想使用SQL查询资源管理器执行相同的查询,经过一些尝试和错误后,以下语法似乎可以工作

select *
from collection
where collection["$v"].searchTerm["$v"] = "test"
这不是最漂亮的解决办法,但它奏效了。我只是想提到这一点,以防其他人试图使用SQL查询资源管理器查询他们的mongodb

我不熟悉这个语法,我能找到的所有文档都没有提到这个独特的案例


谢谢。

有一整套专门围绕DocumentDB SQL查询语言的web文档。我建议你从那里开始。不幸的是,您的问题,正如所写的,本质上是对此类教程/学习内容的请求(或者它是一个关于查询DocumentDB的广泛问题)。快速搜索
documentdb sql
documentdb查询
应该可以为您提供入门所需的一切。@DavidMakogon我看到了一些基本的查询示例,所以我可能需要补充一点,就是$v让我感到困惑。在大多数示例中,似乎Azure没有添加额外的元数据。我的查询中是否包含$v?例如c.$v.searchTerm?这似乎也抛出了一个错误。谢谢你的帮助!如果有这方面的任何文档,我将非常乐意阅读。似乎我看到的每个例子都没有讨论$v,$t的实际含义,也没有讨论为什么要添加它。很抱歉,如果这只是一个初学者的错误,只是想了解我做错了什么。@tydev53您是否通过Mongo API创建了集合并插入文档?我使用express和mongoose创建了集合。也许我需要在我的express应用程序中更好地定义我的模式,以获得更易于查询的内容@杰西卡谢谢你的回答。为了确保我正确理解这一点,因为我使用Mongoose将我的数据插入数据库,这就是添加$signs和所有附加属性的原因?这种差异可能会导致我无法在Azure“查询资源管理器”中进行查询。基本上你是说我需要将我用来插入的API与我查询数据的方式相匹配。你很接近了。Mongoose只是与Mongo通信的包装器。Mongo API是添加$and属性的工具。使用SQLAPI尝试和检索Mongo数据将是一件令人头痛的事情,您应该使用实际的Mongo查询。我不相信现在Azure门户中有Mongo查询浏览器,你必须以另一种方式执行查询啊,好吧,我想我明白了!我能够使用Mongo查询shell进行查询,因此使用SQL“query Explorer”API与我使用Mongo的方式一定不兼容。谢谢你花时间解释这个问题以及我做错了什么。很高兴这有帮助。Cosmos最有趣、功能最强大的功能之一是,您可以使用多个API与之交互,但如果您不熟悉不同的数据格式和API如何相互交互,则可能会增加混乱