当前位置: 首页 > 知识库问答 >
问题:

在宇宙上提供不同结果的查询(与纯Mongo)

颜新
2023-03-14

我有一个Mongo集合,它具有以下文档结构:-

{
    "_id" : ObjectId("5d5e5f1dfc325d4018302293"),
    "status" : "PENDING",
    "workflowJourney" : [ 
        {
            "_id" : ObjectId("5d5e5f1dfc325d401830229c"),
            "workflowDate" : ISODate("2019-08-22T09:23:41.491Z"),
            "workflowType" : "Email",
            "workflowDescription" : "Email sent to Joe Bloggs",
            "workflowRecipient" : {
                "employeeNumber" : "12345",
                "firstName" : "Joe",
                "surname" : "Bloggs",
                "emailAddress" : "joe.blogs@example.com"
            },
            "workflowSubject" : "Invoice Approval Required (2112)",
            "workflowHtmlContent" : "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitiona..."
        }, 
        {
            "_id" : ObjectId("5d5e5f1dfc325d401830229d"),
            "workflowDate" : ISODate("2019-08-22T09:23:41.507Z"),
            "workflowType" : "Email",
            "workflowDescription" : "Email sent to Jane Bloggs",
            "workflowRecipient" : {
                "employeeNumber" : "56789",
                "firstName" : "Jane",
                "surname" : "Bloggs",
                "emailAddress" : "jane.bloggs@example.com"
            },
            "workflowSubject" : "Invoice Approval Required (2112)",
            "workflowHtmlContent" : "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitiona..."
        }
    ],
    "approvals" : [],
    "__v" : 1
}

我正在尝试创建一个查询,它将获得一个workflowJourney。在执行查询时,我将已经知道主文档和workflowJourney子文档的_id,因此我可以在查询中使用这两个。

问题是,对于这个开发项目,我们使用的是Azure Cosmos,而我希望使用的查询给出了奇怪的结果。

如果我用纯Mongo运行这个

db.getCollection('Invoices').find(
 {"workflowJourney._id": ObjectId("5d5e5fd907ba93320cc54198")},
 {"workflowJourney.$": 1.0}
);

我得到了这个很好的结果:-

{
    "_id" : ObjectId("5d5e5f1dfc325d4018302293"),
    "workflowJourney" : [ 
        {
            "_id" : ObjectId("5d5e5f1dfc325d401830229d"),
            "workflowDate" : ISODate("2019-08-22T09:23:41.507Z"),
            "workflowType" : "Email",
            "workflowDescription" : "Email sent to Jane Bloggs",
            "workflowRecipient" : {
                "employeeNumber" : "56789",
                "firstName" : "Jane",
                "surname" : "Bloggs",
                "emailAddress" : "jane.bloggs@example.com"
            },
            "workflowSubject" : "Invoice Approval Required (2112)",
            "workflowHtmlContent" : "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitiona..."
        }
    ]
}

在Azure Cosmos中运行相同的查询(数据库包含相同的数据),我得到了这个:-

{
    "_id" : ObjectId("5d5e5f1dfc325d4018302293"),
    "workflowJourney" : [ 
        {}, 
        {}
    ]
}

因此,没有任何有用的结果。我知道Cosmos DB更像是一个Mongo仿真器,而不是一个纯实现。但我想我想要实现的是一个相当普遍的场景;我想知道是否有人对如何重新编写查询以获得所需结果有任何建议?

非常感谢Glen

共有1个答案

马坚
2023-03-14

好的,所以我已经通过从节点级别进行过滤来实现我需要做的事情。我想过滤器查询实际上是为返回整个文档而设计的,而不是从单个文档中过滤信息。

示例:-

router.get('/emailPreview/:invoiceId/:workflowJourneyItemId', (req, res, next) => {
  Invoice.findOne({ "_id": req.params.invoiceId })
  .then(invoice => {

    if(invoice) {
      const emailHtml = invoice.workflowJourney.filter((item) => {
        return item.id === req.params.workflowJourneyItemId;
      })[0].workflowHtmlContent;

    res.status(200).set('Content-Type', 'text/plain').send(emailHtml);
    } else {
      res.status(404).json({ Error: 'Email not found'});
    }

  }).catch(err => {
     res.status(404).json({ Error: 'Email not found'});
  })
});
 类似资料:
  • 我在我的项目中使用SQL服务器,我试图在两个时间戳之间检索表中的条目。表的架构如下所示: 我需要获取在特定时间戳和当前时间戳之后添加的条目。为此,我尝试了下面提到的查询: 当在SQL客户机上直接执行这个查询时,我得到了所有预期的结果。但是当我从Java JDBC客户端执行相同的查询时,< code>resultset包含的条目的ADDED_TIME等于parameter1。 下面是客户端的Java

  • 我使用Azure Cosmos DB Mongo API,一年前创建了一个Cosmos帐户。 几天前,我刚刚创建了一个具有共享 RU/s 的新数据库,并添加了几个文档,其中一个是这样的: 在mongo shell中,我试图查询这个文档,但是查询没有返回任何结果。 我觉得查询找不到文档很奇怪!有人能帮助说明原因吗?我在一年多前创建的Cosmos数据库上尝试了同样的事情(数据库没有分片键),相同的查询

  • 我正在尝试处理我用tesseract录制的黑板图像,但运气不好。我想过做预处理来帮助提高我们的结果,但不确定该用什么方法来调用它。 这是我拥有的图像: 下面是我正在运行的< code>tesseract命令: 请注意,它不必正确处理所有数学符号,但至少要得到,也许。 我以前有一张照片,只用这些命令就能很好地工作。照片如下: 下面是它会产生的结果: 这并不完美,但比我以前得到的要好得多。如何提高新黑

  • 问题内容: 我正在尝试通过HTTP将SHA256哈希字符串发送到服务器,在服务器上我想通过执行SHA256哈希并验证两者的匹配来进行身份验证。出于测试目的,我使用相同的字符串,但是结果不匹配。可以使用base64_encode调用的默认编码方案吗?谢谢。 在PHP中,我正在做: 在Go中,我正在做 问题答案: 过了一会儿我就知道了。我都将其标准化为十六进制编码。为此,我将代码更改如下: PHP:

  • 问题内容: 当在PHP中对多维数组进行json_encode编码时,我只是通过命名一个数组而不是不命名它们来注意到一个不同的输出。例如: 给出多个json对象的单个数组 而只需为中间数组分配一个名称 创建一个带有多个json对象的单个json对象 为什么第一个选项不返回与第二个执行点相同的结果,并用“ 1”代替“ secondarray” 问题答案: 在JSON中,只有每个数组都有数字键,而对象则

  • 文档: 操作: 合作伙伴: HQL(“INCASAT”=“兑现”,“VANDUT”=“出售”):