我必须在流星的MongoDB中使用distinct
查询。
因此,我添加了meteorhacks: aggregate
。
但是,此软件包的用法太短。
我如何使用此包来实现MongoDB的distinct
查询?
答案 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并没有直接为您解决这个问题,对于初学者来说可能会造成混淆。
您需要了解这些主题(wrapAsync
和Fiber
,async/await
语法,Promise
s及其在Meteor.method
中的用法)知道发生了什么事。