Meteor.js循环数组以检查集合文档中是否已存在值

时间:2018-01-17 11:55:06

标签: javascript arrays json meteor collections

我找不到答案。我看到的所有示例都是查找集合中字段123456的值Number。 但是,如果可能的话,我想知道是否可以在整个集合文档中搜索数组中的数字。 例如,这是我收藏的第一份文件:

{
  "_id": "Qfjgftt7jLh3njw8X",
  "reference": 102020026, // Field that I want to check
  "type": "Moradias",
  "n_beds": 5,
  "price": 30000,
  "departement": "Portalegre",
  "city": "Ponte de Sor",
  "street_name": "Rua do Comércio, CE",
  "l_surface": 248,
  "is_exclusive": true
}

客户端正在导入转换为JSON的XLSX文件,并添加到我的集合中,以便客户端插入reference号码。 然后我想循环我的JSON,(可能有多个引用)获取客户端导入的引用,并检查这些引用是否已经存在于我的一个集合文档中。之后我会抛出一个错误。 我知道我可以做Collection.find({reference: '102020026'}),但问题是我的收藏品中可以有100多种不同的参考文献。

我希望这是有道理的,并且在其他地方没有得到回应。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可能希望使用index.html mongo运算符(see doc)来查找给定数组的所有文档:

$in

这将返回所有文档,其中const ids = [ 102020026, 102021407, 102023660, ]; Collection.find({reference: {$in: ids}}); 匹配其中一个数字,在“ds”数组中给出。

答案 1 :(得分:0)

在我的案例中,解决方案

使用@Jankapunkt回答的Mongo运算符$in

  let arr = [];
    for (let c = 0; c< myJSON.length; c++) {
      arr.push(myJSON[c].reference);
  }
  if(Collection.find({reference: {$in: arr}}).count() > 1) {
    alert(`Reference ${arr} already exists`);
    throw new Error('Duplicated reference');
  }

如果没有$in Mongo运算符,只需使用一个for循环,它将以同样的方式结束:

for (let c = 0; c < myJSON.length; c++) {
 if (Collection.find({reference: myJSON[c].reference}).count > 1) {
    alert(`Reference ${arr} already exists`);
    throw new Error('Duplicated reference');
 }
}