不是$ in不在发布功能中工作吗?

时间:2017-02-15 13:31:41

标签: arrays mongodb meteor publish-subscribe

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

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

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

在发布功能中,为了确保收到,我console.log categoryArray。这在终端中体现得很漂亮: successful reflection that the array is read by the publishing function

在下面找到相应的代码:

 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});没有回复任何东西。不$in在发布功能中不起作用吗?或者我错误地使用$in

请帮忙!

2 个答案:

答案 0 :(得分: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?我想你可以删除它

答案 1 :(得分:0)

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

我的代码目前看起来像这样:

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

注意代码中省略的[]。

无论如何,谢谢你。