mongodb$查找返回空数组

mongodb$查找返回空数组,mongodb,Mongodb,我是mongodb新手,在这个问题中,我有两个集合,一个是selected_date,另一个是global_mobility_report,我尝试在global_mobility_report中查找日期在selected_date的条目,所以我使用$lookup加入这两个集合 选择的日期: { "_id" : ObjectId("5f60d81ba43174cf172ebfdc"), "date" : ISODate(&

我是mongodb新手,在这个问题中,我有两个集合,一个是selected_date,另一个是global_mobility_report,我尝试在global_mobility_report中查找日期在selected_date的条目,所以我使用$lookup加入这两个集合

选择的日期:

{
    "_id" : ObjectId("5f60d81ba43174cf172ebfdc"),
    "date" : ISODate("2020-05-22T00:00:00.000+08:00")
},
{
    "_id" : ObjectId("5f60d81ba43174cf172ebfdd"),
    "date" : ISODate("2020-05-23T00:00:00.000+08:00")
},
{
    "_id" : ObjectId("5f60d81ba43174cf172ebfde"),
    "date" : ISODate("2020-05-24T00:00:00.000+08:00")
},
{
    "_id" : ObjectId("5f60d81ba43174cf172ebfdf"),
    "date" : ISODate("2020-05-25T00:00:00.000+08:00")
},
{
    "_id" : ObjectId("5f60d81ba43174cf172ebfe0"),
    "date" : ISODate("2020-05-26T00:00:00.000+08:00")
},
{
    "_id" : ObjectId("5f60d81ba43174cf172ebfe1"),
    "date" : ISODate("2020-05-27T00:00:00.000+08:00")
}
全球流动性报告:

{
    "_id" : ObjectId("5f49fb013acddb5eec37f99e"),
    "country_region_code" : "AE",
    "country_region" : "United Arab Emirates",
    "sub_region_1" : "",
    "sub_region_2" : "",
    "metro_area" : "",
    "iso_3166_2_code" : "",
    "census_fips_code" : "",
    "date" : "2020-02-15",
    "retail_and_recreation_percent_change_from_baseline" : "0",
    "grocery_and_pharmacy_percent_change_from_baseline" : "4",
    "parks_percent_change_from_baseline" : "5",
    "transit_stations_percent_change_from_baseline" : "0",
    "workplaces_percent_change_from_baseline" : "2",
    "residential_percent_change_from_baseline" : "1"
},
{
    "_id" : ObjectId("5f49fb013acddb5eec37f99f"),
    "country_region_code" : "AE",
    "country_region" : "United Arab Emirates",
    "sub_region_1" : "",
    "sub_region_2" : "",
    "metro_area" : "",
    "iso_3166_2_code" : "",
    "census_fips_code" : "",
    "date" : "2020-02-16",
    "retail_and_recreation_percent_change_from_baseline" : "1",
    "grocery_and_pharmacy_percent_change_from_baseline" : "4",
    "parks_percent_change_from_baseline" : "4",
    "transit_stations_percent_change_from_baseline" : "1",
    "workplaces_percent_change_from_baseline" : "2",
    "residential_percent_change_from_baseline" : "1"
},
{
    "_id" : ObjectId("5f49fb013acddb5eec37f9a0"),
    "country_region_code" : "AE",
    "country_region" : "United Arab Emirates",
    "sub_region_1" : "",
    "sub_region_2" : "",
    "metro_area" : "",
    "iso_3166_2_code" : "",
    "census_fips_code" : "",
    "date" : "2020-02-17",
    "retail_and_recreation_percent_change_from_baseline" : "-1",
    "grocery_and_pharmacy_percent_change_from_baseline" : "1",
    "parks_percent_change_from_baseline" : "5",
    "transit_stations_percent_change_from_baseline" : "1",
    "workplaces_percent_change_from_baseline" : "2",
    "residential_percent_change_from_baseline" : "1"
},
{
    "_id" : ObjectId("5f49fb013acddb5eec37f9a1"),
    "country_region_code" : "AE",
    "country_region" : "United Arab Emirates",
    "sub_region_1" : "",
    "sub_region_2" : "",
    "metro_area" : "",
    "iso_3166_2_code" : "",
    "census_fips_code" : "",
    "date" : "2020-02-18",
    "retail_and_recreation_percent_change_from_baseline" : "-2",
    "grocery_and_pharmacy_percent_change_from_baseline" : "1",
    "parks_percent_change_from_baseline" : "5",
    "transit_stations_percent_change_from_baseline" : "0",
    "workplaces_percent_change_from_baseline" : "2",
    "residential_percent_change_from_baseline" : "1"
}
当我尝试在全局中查找所有与选定日期中的“日期”匹配的条目时(我已将字符串转换为gobal_mobility_报告中的数据格式),它返回空数组

db.global_mobility_report.aggregate([
{$match:{country_region:"Indonesia"}},  
{$addFields: {"dateconverted": {$convert: { input: "$date", to: "date", onError:"onErrorExpr", onNull:"onNullExpr"}:}}},
{
     $lookup:
       {
         from: "selected_date",
         localField:"dateconverted",
         foreignField: "date",
         as: "selected_dates"  // empty
       }
})]
输出为:

 {
        "_id" : ObjectId("5f49fd6a3acddb5eec4427bb"),
        "country_region_code" : "ID",
        "country_region" : "Indonesia",
        "sub_region_1" : "",
        "sub_region_2" : "",
        "metro_area" : "",
        "iso_3166_2_code" : "",
        "census_fips_code" : "",
        "date" : "2020-02-15",
        "retail_and_recreation_percent_change_from_baseline" : "-2",
        "grocery_and_pharmacy_percent_change_from_baseline" : "-2",
        "parks_percent_change_from_baseline" : "-8",
        "transit_stations_percent_change_from_baseline" : "1",
        "workplaces_percent_change_from_baseline" : "5",
        "residential_percent_change_from_baseline" : "1",
        "dateconverted" : ISODate("2020-02-15T08:00:00.000+08:00"),
        "selected_dates" : [ ]
    },
    {
        "_id" : ObjectId("5f49fd6a3acddb5eec4427bc"),
        "country_region_code" : "ID",
        "country_region" : "Indonesia",
        "sub_region_1" : "",
        "sub_region_2" : "",
        "metro_area" : "",
        "iso_3166_2_code" : "",
        "census_fips_code" : "",
        "date" : "2020-02-16",
        "retail_and_recreation_percent_change_from_baseline" : "-3",
        "grocery_and_pharmacy_percent_change_from_baseline" : "-3",
        "parks_percent_change_from_baseline" : "-7",
        "transit_stations_percent_change_from_baseline" : "-4",
        "workplaces_percent_change_from_baseline" : "2",
        "residential_percent_change_from_baseline" : "2",
        "dateconverted" : ISODate("2020-02-16T08:00:00.000+08:00"),
        "selected_dates" : [ ]
    }

获取空数组的原因是
dateconverted
date
字段不匹配

$lookup
运算符在
localField
foreigntField
字段之间执行相等操作,因此基本上以示例为例

db.users.insertMany([
{电子邮件:test@example.com,用户ID:0},
{电子邮件:test2@example.com,userId:1},
{电子邮件:test3@example.com,userId:2},
{电子邮件:test3@example.com,用户ID:3}
]);
db.posts.insertMany([
{by:0,post:“你好,世界”},
{by:0,post:“你好,地球人”},
{by:3,post:“test”}
]);
db.posts.aggregate([
{
$lookup:{
发件人:“用户”,
localField:“通过”,
foreignField:“用户ID”,
as:“职位列表”
}
}
]).toArray();
因为localField与ForeignField匹配,所以输出将是它假定的结果

[
{
“_id”:ObjectId(“5f60f6859a6df3133b325eb0”),
“by”:0,
“帖子”:“你好,世界”,
“职位列表”:[
{
“_id”:ObjectId(“5f60f6849a6df3133b325eac”),
“电子邮件”:test@example.com",
“用户ID”:0
}
]
},
{
“_id”:ObjectId(“5f60f6859a6df3133b325eb1”),
“by”:0,
“帖子”:“你好,地球人”,
“职位列表”:[
{
“_id”:ObjectId(“5f60f6849a6df3133b325eac”),
“电子邮件”:test@example.com",
“用户ID”:0
}
]
},
{
“_id”:ObjectId(“5f60f6859a6df3133b325eb2”),
“by”:3,
“post”:“测试”,
“职位列表”:[
{
“_id”:ObjectId(“5f60f6849a6df3133b325eaf”),
“电子邮件”:test3@example.com",
“用户ID”:3
}
]
}
]
让我们模拟一个不匹配的情况

db.posts.drop();
db.posts.insertMany([
{作者:20,帖子:“你好,世界”},
{by:23,post:“你好,地球人”},
{by:50,post:“test”}
]);
我们得到一个空数组

[
{
“_id”:ObjectId(“5f60f83344304796ae700b4d”),
“by”:20,
“帖子”:“你好,世界”,
“职位列表”:[]
},
{
“_id”:ObjectId(“5f60f83344304796ae700b4e”),
“by”:23,
“帖子”:“你好,地球人”,
“职位列表”:[]
},
{
“_id”:ObjectId(“5f60f83344304796ae700b4f”),
“by”:50,
“post”:“测试”,
“职位列表”:[]
}
]
因此,回到您的问题,空数组的原因是由于
dateconverted
字段与
date
字段不匹配。让我们来看一个例子。

在第一个文档中,
dateconverted
ISODate(“2020-02-16T08:00:00.000+08:00”)
并检查所选文档的日期,没有与此值相对应的字段
ISODate(“2020-02-16T08:00:00.000+08:00”)
。但是,让我们手动插入这个,这样您就可以正确地理解我所说的内容

db.date\u selected.insert({
“_id”:ObjectId(),
“日期”:ISODate(“2020-02-16T08:00:00.000+08:00”)
});

运行聚合管道还将使
选定的\u日期
成为空数组。另一件您必须注意的事情是,
ISODate
对象的
mm/dd/yyy
部分也与您问题中的任何文档不匹配。其次,您必须设计另一种运行比较的方法,因为$addFileds阶段中的聚合管道也会受到时区和其他问题的影响。

获得空数组的原因是
dateconverted
date
字段不匹配

$lookup
运算符在
localField
foreigntField
字段之间执行相等操作,因此基本上以示例为例

db.users.insertMany([
{电子邮件:test@example.com,用户ID:0},
{电子邮件:test2@example.com,userId:1},
{电子邮件:test3@example.com,userId:2},
{电子邮件:test3@example.com,用户ID:3}
]);
db.posts.insertMany([
{by:0,post:“你好,世界”},
{by:0,post:“你好,地球人”},
{by:3,post:“test”}
]);
db.posts.aggregate([
{
$lookup:{
发件人:“用户”,
localField:“通过”,
foreignField:“用户ID”,
as:“职位列表”
}
}
]).toArray();
因为localField与ForeignField匹配,所以输出将是它假定的结果

[
{
“_id”:ObjectId(“5f60f6859a6df3133b325eb0”),
“by”:0,
“帖子”:“你好,世界”,
“职位列表”:[
{
“_id”:ObjectId(“5f60f6849a6df3133b325eac”),
“电子邮件”:test@example.com",
“用户ID”:0
}
]
},
{
“_id”:ObjectId(“5f60f6859a6df3133b325eb1”),
“by”:0,
“帖子”:“你好,地球人”,
“职位列表”:[
{
“_id”:ObjectId(“5f60f6849a6df3133b325eac”),
“电子邮件”:test@example.com",
“用户ID”:0
}
]
},
{
“_id”:ObjectId(“5f60f6859a6df3133b325eb2”),