执行文件插入功能

时间:2014-10-29 16:51:15

标签: mongodb meteor

我正在尝试找到一种在服务器上实现以下伪功能的方法。字段likesRecieved likesShownlikesMatch in存在于Posts集合中的文档中。< / p>

默认情况下,我要求此功能执行收集后的每个文档。这是因为我喜欢这样做的功能......

1)查找likesRecieved和likesShown字段中存在的值。

2)在likesMatch字段中插入这些值。

3)从likesRecieved中删除操作1中找到的值并且likeShown

这就是我在服务器上尝试做的事情......

 likesRecieved: idA, idB, idE, idF, idL
 likesShown: idE, idC, idF

..perform a function to result in the following...

 likesRecieved: idA, idB, idL
 likesShown: idC,
 likesMatch: idE, idF

这是我的代码,仅在一个文档中找到两个数组中的ID。 likeMatch帮助器返回Posts集合中所选文档中“likesRecieved”和“likesShown”字段中可能存在的userIds。然后将结果值插入likesMatch字段。

   likeMatch: function() {
    var selectedPostId = Session.get('postId'); // _id of document in Post collection

         var arrayOfLikeRecieved = Posts.find({_id: selectedPostId}, {fields: {LikesRecieved: 1}}).fetch();
         var sumArrayRecieved = _.chain(arrayOfLikeRecieved).pluck('LikesRecieved').flatten().value();

         var arrayOfLikeShown = Posts.find({_id: selectedPostId}, {fields: {LikesShown: 1}}).fetch();
         var sumArrayShown = _.chain(arrayOfLikeShown).pluck('LikesShown').flatten().value();

    var duplicates = _.intersection(sumArrayRecieved, sumArrayShown);
    Meteor.call('insertDuplicateIntoMatchField', duplicates);

},

1 个答案:

答案 0 :(得分:1)

MongoDB没有像其他数据库那样有钩子,所以自动无法在插入文档时调用函数。

但是你有几个选择。一种方法是在应用程序中有一个挂钩,它在插入文档之前运行以运行您的函数。这可以通过使用Collection.deny function在流星中实现。

如果您希望在mongodb中执行该功能,那么您必须手动调用该功能。问题是如何知道何时插入或更新文档。幸运的是,meteor允许你observe changes到光标。您可以使用它来调用数据库,并在文档更新时运行存储过程(函数)。