【问题标题】:Meteor js aggregate and publishMeteor js 聚合和发布
【发布时间】:2019-10-23 15:15:17
【问题描述】:

我想内部加入用户和预订集合 which reservation.userId = users._id 在流星.js 中。 我想使用用户集合中的 userObj 发布我的预订集合 所以我使用了聚合,

Meteor.publish("Reservations", function() {
var options = {
    allowDiskUse: true
};

var pipeline = [
    {
        $project: {
            _id: 0,
            reservations: "$$ROOT"
        }
    },
    {
        $lookup: {
            localField: "reservations.userId",
            from: "users",
            foreignField: "_id",
            as: "users"
        }
    },
    {
        $unwind: {
            path: "$users",
            preserveNullAndEmptyArrays: false
        }
    },
    {
        $project: {
            "reservations._id": "$reservations._id",
            "reservations.placeId": "$reservations.placeId",
            "reservations.userId": "$reservations.userId",
            "reservations.date": "$reservations.date",
            "users._id": "$users._id",
            "users.profile": "$users.profile",
            _id: 0
        }
    }
];
 return Reservations.aggregate(pipeline, options);
  });

我正在使用聚合(使用 meteorhacks:aggregate)

但我有一些这样的错误,

I20191023-17:59:56.879(3)? Exception from sub Reservations id Yu9APaNsJKhNhnnGr Error: Publish function can only return a Cursor or an array of Cursors
I20191023-17:59:56.880(3)?     at Subscription._publishHandlerResult (packages/ddp-server/livedata_server.js:1132:18)
I20191023-17:59:56.882(3)?     at Subscription._runHandler (packages/ddp-server/livedata_server.js:1063:10)
I20191023-17:59:56.882(3)?     at Session._startSubscription (packages/ddp-server/livedata_server.js:860:9)
I20191023-17:59:56.884(3)?     at Session.sub (packages/ddp-server/livedata_server.js:625:12)

我使用了 jcbernack:reactive-aggregate 包,但仍然不起作用。

我需要一些帮助,如何将聚合与发布一起使用?

【问题讨论】:

    标签: mongodb cursor aggregate publish-subscribe meteor-blaze


    【解决方案1】:

    只需将.toArray 添加到行尾,如下所示:

    Reservations.aggregate(pipeline, options).toArray();
    

    小贴士,最好使用sakulstra:aggregate,因为它是meteorhacks:aggregate 的维护分支。

    https://github.com/sakulstra/meteor-aggregate

    【讨论】:

      【解决方案2】:

      添加 .toArray 时出现此错误:

      I20191025-22:31:31.463(3)? Exception from sub Reservations id Af7Hs2WXjmmcErenc TypeError: Reservations.aggregate(...).toArray is not a function
      I20191025-22:31:31.464(3)?     at Subscription._handler (server/reservation.js:41:12)
      I20191025-22:31:31.464(3)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1771:12)
      I20191025-22:31:31.464(3)?     at DDP._CurrentPublicationInvocation.withValue (packages/ddp-server/livedata_server.js:1046:15)
      I20191025-22:31:31.465(3)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1234:12)
      I20191025-22:31:31.466(3)?     at Subscription._runHandler (packages/ddp-server/livedata_server.js:1044:51)
      I20191025-22:31:31.466(3)?     at Session._startSubscription (packages/ddp-server/livedata_server.js:860:9)
      I20191025-22:31:31.466(3)?     at Session.sub (packages/ddp-server/livedata_server.js:625:12)
      I20191025-22:31:31.467(3)?     at packages/ddp-server/livedata_server.js:559:43
      

      但我试过了:

       Reservations.aggregate(pipeline, options).forEach(function(doc) {
              console.log(doc);
       });
      

      我得到了我的结果,但我仍然无法返回这个结果。

      【讨论】:

        猜你喜欢
        • 2018-03-06
        • 2015-09-25
        • 2015-08-25
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        • 2015-02-02
        • 1970-01-01
        • 2013-12-17
        相关资源
        最近更新 更多