我在MongoDB中创建视图时遇到了麻烦。我刚开始使用Mongo,所以这个问题看起来很傻。
我有以下文件:
{
"_id" : NumberInt(12213054),
...
"_dt" : {
"_doc" : "time",
"time" : "01:30",
"date" : "04/02/18",
"tz" : "CET",
"tzoffset" : NumberInt(3600),
"uts" : NumberInt(1517704200)
},
...
}
我正在尝试为日期为#04; 04/02/18的文档创建视图。
"_dt.date"
字段的类型为String
。我尝试使用$eq
运算符进行比较。
我有以下查询来选择数据:
{$match: {
"_dt.date": {
$eq: {
$concat: [
{$dateToString: {
format: "%d/%m/",
date: new Date("2018-02-04")
}},
{$substr: [
{$year : new Date("2018-02-04")},
2,
2
]}
]
}
}
}
}
但是在执行查询后,结果为空。
子查询构造的日期字符串似乎是正确的:
db.matches.aggregate({ $project: { date:
{
$concat: [
{$dateToString: {
format: "%d/%m/",
date: new Date("2018-02-04")
}},
{$substr: [
{$year : new Date("2018-02-08")},
2,
2
]}
]
}
}
}
)
输出是:
{
"_id" : NumberInt(12213054),
"date" : "04/02/18"
}
有没有人知道为什么第一个查询不起作用?
答案 0 :(得分:1)
$match
按设计将字段与常量值与常规查询运算符进行比较。
为了比较mongodb中的两个字段,您要使用$match
和$expr
与3.6中的聚合查询运算符。
比较query operators
与aggregation comparison operators
。
{"$match":{
"$expr":{
"$eq":[
"$_dt.date",
{"$concat":[
{"$dateToString":{"format":"%d/%m/","date":new Date("2018-02-04")}},
{"$substr":[{"$year":new Date("2018-02-04")},2,2]}
]}
}
}}
或
您只需传递在客户端创建的日期字符串并直接比较
即可{"$match":{"_dt.date":"04/02/18"}}