MongoDB中的匹配会返回不需要的结果

时间:2016-03-15 09:52:21

标签: mongodb

我有一个名为flights的集合。在该集合中,我有两个字段:origin_countrydest_country

这些字段只记录特定航班的起始国家和目的地国家。

我试图写一个将返回的查询:

  • 所有国际航班(即原籍国和目的地国家不同)。
  • 每个的总和(即 - 该集合中该航班的出现次数)。

我已经查询的问题是它在运行时还返回国内航班:

QUERY:

db.flights.aggregate([
    {$match: {
        checking_countries_dont_match: { $ne: ["origin_country", "dest_country"] } 
    } },
    {$group: {
        _id: {
            origin_country: "$origin_country",
            dest_country: "$dest_country"
        },
        "count": {$sum:1}
    } },
    {$sort: {"count":-1} }
])

文件样本:

{
    "_id" : "2675594611",
    "origin_country" : "Germany",
    "dest_country" : "United Arab Emirates",
    "airline_name" : "etihad-airways-etd"
}

{
    "_id" : "2661517182",
    "origin_country" : "Thailand",
    "dest_country" : "Thailand",
    "airline_name" : "nok-air-nok",
}

更新

我将查询更改为以下内容,但我仍然得到原点和目标相同的结果:

db.flights.aggregate([ 
    { $project: { 
        dont_match: { $ne: ["origin_country", "dest_country"] },          
        origin_country: "$origin_country", 
        dest_country: "$dest_country",
        airline_name: "$airline_name"
    } }, 
    { $match: { 
        airline_name: "etihad-airways-etd",
        dont_match: true
    } },
    { $group: {
        id: {
            origin_country: "$origin_country",
            dest_country: "$dest_country"
        }
    } }
]);

更新2

Wokring Query:

db.flights.aggregate([ 
    { $project: { 
        dont_match: { $ne: ["$origin_country", "$dest_country"] },          
        origin_country: "$origin_country", 
        dest_country: "$dest_country",
        airline_name: "$airline_name"
    } }, 
    { $match: { 
        airline_name: "etihad-airways-etd",
        dont_match: true
    } },
    { $group: {
        _id: {
            origin_country: "$origin_country",
            dest_country: "$dest_country"
        },
        count: {$sum:1}
    } },
    { $sort: {count:-1}}
]);

感谢大家的帮助:)。

2 个答案:

答案 0 :(得分:0)

您需要做的就是稍微修改一下您的查询。看看这个例子,应该给你一个想法:

db.flights.aggregate([
    {
      $project: {
        dont_match: { $ne: ["$origin_country", "$dest_country"] },
        ...
      } 
    },
    {
      $match: {
        dont_match: true
      } 
    },
    ...
]);

答案 1 :(得分:0)

请您在下面查询是否符合您的期望:

db.flights.aggregate([ 
    { $project: { 
        dont_match: {$cmp: ['$origin_country', '$dest_country']},          
        origin_country: "$origin_country", 
        dest_country: "$dest_country"
    } }, 
    { $match: { dont_match: {$ne: 0} } } 
]);