【发布时间】: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.online是20或10时进行匹配,您的解决方案将如何处理?我有一个类似的问题,我正在使用 $or 但触发器与我想要的不匹配。我已经发布了here。谢谢! -
原始问题,但不完全相同stackoverflow.com/questions/62518308/…