2012-10-10 83 views
0

假设我有一个城市名称数组和一个MongoDB城市名称集合。再说说我的数组是这样的:如何查找未包含在MongoDB集合中的数组中的项目

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

和我收集的样子

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

我想要做的就是执行返回到我的旧金山和洛杉矶的查询。到目前为止,我唯一的想法是只执行查询,获取匹配,并从原始数组中进行数组减法(从而得到我的城市),但我想知道是否可以通过一步查询来完成。

在此先感谢!

+0

我将__reject()从underscorejs.com – chovy

+0

该数组存在于您的应用程序中,而不是在Mongo中,因此mongo无法从技术上返回给您不存在的东西。 –

回答

2

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

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

这将返回匹配集合中的某个城市的数组。在你上面的例子中,你会回来: [“chicago”,“new york”]

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

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

0

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

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

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); 
} 
+0

每个城市都是它自己独立的文档集合。从数据库中抓取整个集合是不可取的,所以这是行不通的。 – ZacAttack

相关问题