流星更新 $push 到单个记录中尚不存在的数组

Meteor update with $push to an array that doesn't already exist on a single record

我已经在 Whosebug 上找到了很多答案,但仍有问题。

首先,我在客户端的控制台或终端控制台中没有收到任何错误。 return 显示成功但未更新。

我在服务器上使用如下方法:

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';

Meteor.methods({
   'agentPageAccess'({userID, pageID}) {
      Pages.update({ "PageID" : pageID }, {
        $push: { "agentAccess" : { "agentID" : userID } }
      });   
    }
});

这是调用更新前的数据。注意:该数组不存在,我希望添加它并在该新数组中更新数据,前提是该数组尚不存在。如果该数组已经存在,我希望它将新值推送到现有数组的末尾。

{ "_id" : "pPvQezHxC4J4tkGQg", "PageID" : "1234567", "PageName" : "Test Page", "PageToken" : "7654321" }

我已检查以确保 userID 和 pageID 在触发该方法时具有值。

这是客户端的方法调用:

Template.assignAgents.events({
        'submit form': function(event) {
            event.preventDefault();
            let target = event.target;
            let userID = target.userSelect.value;
            let pageID = target.Page.value;

            Meteor.call('agentPageAccess', {
                userID: userID,
                pageID: pageID
            }, (err,res) => {
                if(err){
                    alert(err);
                }else{
                    alert("Agent assigned to page");
                }
            });
        }
    });

我是一个有多年经验的老程序员,但对 Meteor 还是个新手。所以请像我是这个平台的新手一样说话。非常感谢您的帮助!!

使用 $addToSet 代替 $pull。 $addToSet 将创建具有指定值的数组字段。 这里是 link 到 mongodb 文档 addToSet

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';

Meteor.methods({
   'agentPageAccess'({userID, pageID}) {
      Pages.update({ "PageID" : pageID }, {
        $addToSet: { "agentAccess" : { "agentID" : userID } }
      });   
    }
});