【问题标题】:How to match a trigger on a specific field in mongodb stitch?如何在 mongodb 缝合中匹配特定字段上的触发器?
【发布时间】:2019-10-31 20:19:03
【问题描述】:

mongodb的stitch应用上的$match表达式不能正常工作。

我正在尝试设置一个仅适用于集合中一个字段的简单更新触发器。

触发器设置提供了一个 $match 聚合,设置起来似乎很简单。

例如,如果我希望触发器仅在指定集合中的“在线”字段设置为“真”时触发,我会这样做:

{"updateDescription.updatedFields":{"online":"true"}}

其中一个针脚触发器与以下内容相同:

{$match:{{updateDescription.updatedFields:{online:"true"}}}

问题是当我尝试匹配作为对象的字段的更新时。(例如hours:{online:40,offline:120}

由于某种原因 $exists 或 $in 不起作用 这样做:

{"updateDescription.updatedFields":{"hours":{"$exists":true}}

不工作,也不做类似的事情:

{"updateDescription.updatedFields":{"hours.online":{"$exists":true}}

触发器的 $match 应该与普通的 mongo $match 完全相同。 他们只是提供了一个例子:

{
  "updateDescription.updatedFields": {
    "status": "blocked"
  }
}

示例来自这里: https://docs.mongodb.com/stitch/triggers/database-triggers/

我尝试了 100 种变体,但我似乎无法得到它

如果匹配是特定值,则触发器工作正常:

{"updateDescription.updatedFields":{"hours.online":{"$numberInt\":"20"}}

然后我在数据库中将 hours.online 设置为 20。

【问题讨论】:

  • 如何检查触发器是否有效?另外,你的更新命令是什么?
  • @Radu Tarcea 什么对你有用?您将如何更新您的解决方案以使用 $or?例如,如果您想在hours.online2010 时进行匹配,您的解决方案将如何处理?我有一个类似的问题,我正在使用 $or 但触发器与我想要的不匹配。我已经发布了here。谢谢!
  • 原始问题,但不完全相同stackoverflow.com/questions/62518308/…

标签: mongodb mongodb-stitch


【解决方案1】:

我能够通过使用显式的$expr 运算符来使其匹配项目,或者将其声明为单个字段而不是嵌入对象。 IE。 "updateDescription.updatedFields.statue": "blocked"

【讨论】:

  • 您将如何更新您的解决方案以使用 $or?例如,如果您想在“statue”(或者您的意思是“status”?)为“blocked”或“pending”时进行匹配,您将如何修改匹配表达式以使用它?我有一个类似的问题,我正在使用 $or (没有 $expr 因为 $or 显然需要始终是第一个运算符)但触发器与我想要的不匹配。我已经发布了here。谢谢!
【解决方案2】:

我自己也在为此苦苦挣扎,试图在某个嵌套字段更新为任何值(而不仅仅是一个特定值)时触发触发器。

这个问题似乎与变更流如何报告更新的字段有关。

感谢 MongoDB 的支持,我终于可以将其作为一个潜在的解决方案提供,至少对于更简单的情况:

{
    "$expr": {
        "$not": {
            "$cmp": [{
                "$let": {
                    "vars": { "updated": { "$objectToArray": "$updateDescription.updatedFields" } },
                    "in": { "$arrayElemAt": [ "$$updated.k", 0 ] }
                }},
                "example.subdocument.nested_field"
            ]
        }
    }
}

当然用您自己的点符号字段路径替换example.subdocument.nested_field

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多