Javascript 如何将对一个文档所做的更改传播到mongodb中的其他相关文档

Javascript 如何将对一个文档所做的更改传播到mongodb中的其他相关文档,javascript,mongodb,meteor,observers,Javascript,Mongodb,Meteor,Observers,我有一个meteor应用程序,其中有一个观测者来帮助检测某个特定文档的任何更改。如何将对该文档所做的更改传播到其他相关文档,而不必编写多个通用查询 我所拥有的: 组织政策: { "_id" : "uudY4ekaZ4tPpN7KN", "organizationName" : "combat wombat systems 2", "priorityIP" : "2.2.2.2,6.6.6.6/24", "blacklistedServers" : "3.3.3.3

我有一个meteor应用程序,其中有一个观测者来帮助检测某个特定文档的任何更改。如何将对该文档所做的更改传播到其他相关文档,而不必编写多个通用查询

我所拥有的:

组织政策:

{
    "_id" : "uudY4ekaZ4tPpN7KN",
    "organizationName" : "combat wombat systems 2",
    "priorityIP" : "2.2.2.2,6.6.6.6/24",
    "blacklistedServers" : "3.3.3.3",
    "policyType" : "orgLevelPolicy",

}
DeptLevelPolicy:

{
    "_id" : "Fb75pKgvePxakKTi4",
    "organizationName" : "combat wombat systems 2",
    "departmentName" : "mighty moose",
     "useOrgPolicyValuesForPriorityIp" : true,
    "priorityIP" : "2.2.2.2,6.6.6.6/24",
    "useOrgPolicyValuesBlacklistedServers" : true,
    "blacklistedServers" : "3.3.3.3",
    "policyType" : "departmentLevelPolicy",
}
我需要做什么

 Meteor.startup(() => {

     var cursor = policies.find({
         policyType: "orgLevelPolicy"
     });

     var handle = cursor.observe({
         changed: function(orgLevelPolicyChanged) {
             console.log("Updating: departmentLevelPolicy: priorityIP");
             policies.update({policyType:"departmentLevelPolicy","useOrgPolicyValuesForPriorityIp": true},{$set:{priorityIP: orgLevelPolicyChanged.priorityIP, organizationName: orgLevelPolicyChanged.organizationName}},{multi:true});
             console.log("Updating: departmentLevelPolicy: blacklistedServers");
         },

     });
 });
如果
orgLevelPolicy
文档发生更改,则仅更新那些字段的相应布尔标志设置为
true

例如

如果
orgLevelPolicy.priorityIP
发生更改,则仅更新那些
deptLevelPolicy
deptLevelPolicy.priorityIP
字段,其
UseOrgPolicyValuesBlackListedServer
设置为
true

我有一个粗略的观察者,如下所示,但是对orgPolicy的任何更改都会触发对alldeptLevelPolicy的大量更改,而不管它们的布尔标志是否设置,或者字段是否已经更改

(我希望我的解释有意义。如果我需要做任何更改以更好地说明场景,请告诉我)


您应该非常接近,但您正在尝试匹配修饰符中的父组织,而不是查询

将第一个参数中的名称匹配到
.update()
(查询)而不是第二个(修饰符)


谢谢你,米歇尔。让我试试这个。哦,是的,当我删除非必要代码时,我错过了
policyType
。我把它加回去了。至于
parentPolicyId
,我的部门名称在所有文档中都是唯一的。所以我猜这会持续下去。
const handle = cursor.observe({
  changed(orgLevelPolicyChanged) {  
    policies.update(
      {
        policyType: "departmentLevelPolicy",
        useOrgPolicyValuesForPriorityIp: true,
        organizationName: orgLevelPolicyChanged.organizationName
      },
      { $set:
        {
          priorityIP: orgLevelPolicyChanged.priorityIP,
        }
      },
      { multi:true }
    );
  },
 });