【问题标题】:Doesn't $in not work in in publish functions?$in 在发布功能中不起作用吗?
【发布时间】:2017-02-15 13:31:41
【问题描述】:

在我的订阅函数中,我传递了一个会话变量(categoryArray),它也是发布函数的一个数组,如下代码所示:

Router.route('/MerchantLandingPage', {    
subscriptions: function(){
    var categoryArray = Session.get('category');

    return Meteor.subscribe('MerchantTrending', categoryArray)    
   }
});

在发布功能中,为了保证收货,我console.logcategoryArray。这很好地反映在终端中:

在下面找到对应的代码:

 Meteor.publish('MerchantTrending', function (categoryArray){
 var currentUser = this.userId;
 console.log ("Printing out Arrary>> " + categoryArray)
 return buyList.find({ who:"Merchant", itemCategory: { $in: [ categoryArray ] } }, {ownerId:currentUser }, {skip: 0, limit: 3});

});

我的问题是return buyList.find({ who:"Merchant", itemCategory: { $in: [ categoryArray ] } }, {ownerId:currentUser }, {skip: 0, limit: 3}); 没有返回任何东西。 $innot 在发布功能中不起作用吗?还是我以某种方式错误地使用了$in

请帮忙!

【问题讨论】:

  • 您是否尝试过使用类似 robomongo 的方式运行查询?

标签: arrays mongodb meteor publish-subscribe


【解决方案1】:

您的出版物的问题似乎是您的查询有问题。

您将 ownerId: currentUser 包裹在花括号 {}

将您的数据库查询更改为以下内容:

buyList.find(
    { who:"Merchant", ownerId: currentUser, itemCategory: { $in: [ categoryArray ] } }, 
    {skip: 0, limit: 3}
);

如果您愿意,您也可以在查询中插入 this.userId 并删除变量

buyList.find(
    { who:"Merchant", ownerId: this.userId, itemCategory: { $in: [ categoryArray ] } }, 
    {skip: 0, limit: 3}
);

另外,你为什么使用skip: 0?我想你可以删除它

【讨论】:

    【解决方案2】:

    @Sean 感谢您指出花括号。然而,删除它们并不能解决手头的问题。我通过删除包含数组的 [ ] 和代码解决了这个问题。现在代码运行完美。

    我的代码目前如下所示:

    buyList.find(
    { who:"Merchant", ownerId: currentUser, itemCategory: { $in: categoryArray } }, 
    {skip: 0, limit: 3}
    );
    

    请注意代码中省略的 [ ]。

    还是谢谢你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多