mongodb查询:在字段上使用过滤器获取N个结果

时间:2015-07-27 14:12:15

标签: javascript mongodb mongodb-query

我使用mongodb,我正在尝试提出请求,但我需要帮助。我需要查询包含字段“country”的用户集合。

示例:

{
    "name" : "John",
    "country" : "FR"
}

例如,我希望从法国获得30位用户。 如果数据库中有来自法国的30个或更多用户,那么它可以从法国返回30个用户。 如果只有来自法国的12个用户(少于30个),我希望得到这12个用户和18个其他用户(有30个用户),无论在哪个国家/地区。

我想知道是否可以使用经典请求或者我必须使用MapReduce

1 个答案:

答案 0 :(得分:0)

我相信你不能在一个查询中这样做。

  • 获取country: "FR"
  • 的文档数量
  • 如果此数字大于或等于30,则使用cursor.limit方法获得正好30个文档。如果此数字小于30,则将所有文档放在country: 'Fr'的位置,并使用.apply()和{{3}将country不等于FR的另一个查询扩展结果方法。

    var count = db.collection.count({ "country": "FR" });
    var result = [];
    
    if (count >= 30) {
        result = db.collection.find({ "country": "FR" }).limit(30).toArray();
    }
    
    if (count < 30 ) { 
        result = db.collection.find({ "country": "FR" }).toArray();
        result.push.apply(result, db.collection.find({ "country": { "$ne": "FR" }}).limit(30-count).toArray());
    }