Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 文档插入时执行的函数_Mongodb_Meteor - Fatal编程技术网

Mongodb 文档插入时执行的函数

Mongodb 文档插入时执行的函数,mongodb,meteor,Mongodb,Meteor,我正在尝试在服务器上实现以下伪函数。中的likesRecievedlikesShown和likesMatch字段存在于Posts集合中的文档中 默认情况下,我需要为后期收集中的每个文档执行此功能。这是因为我喜欢这个函数来做这个 1)查找存在于likesRecieved和LikedShowed字段中的值 2)在likesMatch字段中插入这些值 likeMatch: function() { var selectedPostId = Session.get('postId'); /

我正在尝试在服务器上实现以下伪函数。中的
likesRecieved
likesShown
likesMatch
字段存在于Posts集合中的文档中

默认情况下,我需要为后期收集中的每个文档执行此功能。这是因为我喜欢这个函数来做这个

1)查找存在于likesRecieved和LikedShowed字段中的值

2)在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);

},
3)将操作1中的值从LIKESEVED和likesShown中删除

这就是我在服务器上要做的事情…

 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 helper返回Posts集合中选定文档中可能存在的“
likesRecieved
”和“
likesShown
”字段中的用户ID。然后将结果值插入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);

},

MongoDB不像其他数据库那样具有钩子,因此无法在插入文档时自动调用函数

不过,你有几个选择。一种方法是在应用程序中设置一个钩子,该钩子在插入文档以运行函数之前运行。这可以在meteor中通过使用


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

那么您是否想过在服务器上为MongoDB编写一些本机代码?可爱的下划线/lodash,但服务器做得更好。“忘却你所学”——聪明的绝地大师——这就是我的想法。因为我不知道从哪里开始,所以我在这里提出了这个问题。因此,一个相关文件的链接将非常有助于我的工作。谢谢你这解释很有帮助。我认为观察更改是最好的选择,因为我只需要在插入时执行函数。我将修改likesMatch字段如何使用添加的拒绝规则填充。谢谢所有20个问题