如何查找数组中未包含在MongoDB集合中的项目

时间:2012-10-10 21:35:18

标签: javascript arrays mongodb

假设我有一系列城市名称和MongoDB城市名称集合。假设我的数组看起来像:

["San Francisco", "chicago", "New York", "Los Angeles"]

我的收藏品看起来像

{{cityName: "chicago"}
{cityName: "New York"}}

我想做的是执行一个返回旧金山和洛杉矶的查询。到目前为止,我唯一的想法是只执行查询,获取匹配,并从原始数组中进行数组减法(从而得到我的城市),但我想知道是否有办法在一步查询中执行此操作。

提前致谢!

3 个答案:

答案 0 :(得分:2)

您需要针对MongoDB集合执行以下查询:

db.cities.distinct(“cityName”,{cityName:{$ in:[“new york”,“los angeles”,“chicago”,“san francisco”]}})

这将返回与集合中的某些内容匹配的城市数组。在上面的例子中,你会回来: [“芝加哥”,“纽约”]

您现在可以从原始数组中减去这些元素并获得所需的结果。

关键是要做一个独特的查询(而不是获取所有结果)并传递一个查询,将查询限制在您关注的城市,而不是所有由您的集合代表的城市。

答案 1 :(得分:0)

数组减法是继续使用它的唯一方法,即使你使用任何mongodb驱动程序,如果它支持这个功能,它最终会做同样的事情。

对MongoDb的查询将始终返回包含在其中的值或空值。所以你必须取值并做一个数组减法。

答案 2 :(得分:0)

你的收藏中是否有昏迷?

{{cityName: "chicago"},
{cityName: "New York"}}

如果是,您可以这样做:

for( var i in collec ){
  var cityname = collec[i]['cityname'];
  // if you use jquery
  var getcity = $.grep( yourarray, function(n,i){
   return n == cityname;
  });
  // getcity in an array with all matching elements
  console.log(getcity);
}