在Meteor的Minimongo中是否有$运营商替代品?

时间:2016-03-23 23:06:24

标签: javascript mongodb meteor minimongo

我正在尝试在客户端的Meteor集合中查询数组内的特定元素,但Minimongo不支持$运算符。有没有替代过滤我的查询,所以它只返回数组中的特定元素?

我的收藏结构如下:

{
  "userID": "abc123",
  "array": [
    {
      "id": "foo",
      "propA": "x",
      "propB": "y"
    },
    {
      "id": "bar",
      "propA": "a",
      "propB": "b"
    }
  ]
}

我正在尝试编写一个只返回id为“foo”的数组中对象的查询。在Mongo中,该查询将是:

collection.find({
  "userID": "abc123",
  "array.id": "foo"
}, {
  "array.$": 1
});

但是,Minimongo在预测中不支持$运算符,因此会抛出错误。我尝试使用$ elemMatch进行类似的结构化查询,并尝试solution described here,但它没有完成我想要做的事情。

是否有另一种方法可以使用Minimongo查询此数组中的一个元素?

1 个答案:

答案 0 :(得分:3)

您可以使用findWhere提取数组中的第一个匹配对象。尝试这样的东西:

// Find all documents matching the selector.
const docs = Collection.find({ userId: 'x', 'array.id': 'y' }).fetch();

// For each document, find the matching array element.
for (let doc of docs) {
  let obj = _.findWhere(doc.array, { id: 'y' });
  console.log(obj);
}