如何在meteorhacks中使用不同的查询:Meteor上的聚合包

时间:2018-08-08 02:04:21

标签: mongodb meteor

我必须在流星的MongoDB中使用distinct查询。 因此,我添加了meteorhacks: aggregate。 但是,此软件包的用法太短。 我如何使用此包来实现MongoDB的distinct查询?

1 个答案:

答案 0 :(得分:1)

distinct函数不是聚合框架的一部分。它可以作为Mongo集合的属性来使用。

在Meteor中,集合是由Meteor的实现包装的,因此,要获取已包装的Mongo集合,可以使用rawCollection()函数。

该函数是本地node.js MongoDB驱动程序的一部分,按照其约定,将错误优先的回调作为其最后一个参数,或者返回一个promise。

这导致了几种获取值的方法。

const FooCollection = new Mongo.Collection("foo_collection");
const rawFoo = FooCollection.rawCollection();

// now you have several options to get the data:
// 1. warp the function with Meteor's wrapAsync() to use fibers and use synchronous syntax:
const fooDistinct = Meteor.wrapAsync(rawFoo.distinct, rawFoo);
const values1 = fooDistinct("foo");

// 2. use async/await, if you can:
const values2 = await FooCollection.distinct("foo");

// 3. return the promise if you are in a method, or use the values asynchronously:
FooCollection.distinct("foo")
.then(values3 => {
  // do something with the values
});

这涉及到一些更高级的主题,Meteor并没有直接为您解决这个问题,对于初学者来说可能会造成混淆。

您需要了解这些主题(wrapAsyncFiberasync/await语法,Promise s及其在Meteor.method中的用法)知道发生了什么事。