【问题标题】:How to find items in an array that are not contained in a MongoDB collection如何在数组中查找未包含在 MongoDB 集合中的项目
【发布时间】:2012-10-01 11:33:31
【问题描述】:

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

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

我的收藏看起来像

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

我想做的是执行一个返回给我旧金山和洛杉矶的查询。到目前为止,我唯一的想法是只执行查询,获取匹配项,然后从原始数组中减去数组(从而得到我的城市),但我想知道是否有一种方法可以在一步查询中完成。

提前致谢!

【问题讨论】:

  • 我会 _.reject() from underscorejs.com
  • 该数组存在于您的应用程序中,而不是在 Mongo 中,因此从技术上讲,mongo 无法返回其中不存在的东西。

标签: javascript arrays mongodb


【解决方案1】:

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

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

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

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

关键是进行不同的查询(而不是获取所有结果)并将查询限制为您关心的城市,而不是您的集合所代表的所有城市。

【讨论】:

    【解决方案2】:

    数组减法是进行此操作的唯一方法,因为即使您使用任何 mongodb 驱动程序并且如果它支持此功能,它最终也会做同样的事情。

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

    【讨论】:

      【解决方案3】:

      你的收藏中有昏迷吗?

      {{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);
      }
      

      【讨论】:

      • 每个城市都是它自己在集合中的单独文档。而且从数据库中获取整个集合是不可取的,所以这是行不通的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2018-01-30
      相关资源
      最近更新 更多