我有一份如下文件。
{
"_id" : 1,
"name" : "Robin",
"membership" : [
{
"package" : 12,
"time" : "months",
"active" : true,
"start" : ISODate("2017-07-26T09:21:55.360Z")
},
{
"package" : 1,
"time" : "months",
"active" : true,
"start" : ISODate("2017-09-26T09:51:46.915Z")
}
]
}
{
"_id" : 9,
"name" : "Linh Tran",
"membership" : [
{
"package" : 1,
"time" : "months",
"active" : true,
"start" : ISODate("2017-09-26T09:57:37.638Z")
}
]
}
我想查询9月份开始的会员资格。我知道Doc中有$month (aggregation)但不包括我的情况。
更新:输出应包含成员从9月开始的结果。就像7月没有显示其他月份一样。
答案 0 :(得分:0)
运行首次使用 $redact
管道的聚合操作,在收集级别过滤其成员资格于9月开始的文档,如下所示:
db.test.aggregate([
{
"$redact": {
"$cond": [
{ "$or": [
"$membership",
{ "$eq": [ { "$month": "$start" }, 9 ] }
] },
"$$DESCEND",
"$$PRUNE"
]
}
}
])
示例输出
/* 1 */
{
"_id" : 1,
"name" : "Robin",
"membership" : [
{
"package" : 1.0,
"time" : "months",
"active" : true,
"start" : ISODate("2017-09-26T09:51:46.915Z")
}
]
}
/* 2 */
{
"_id" : 9,
"name" : "Linh Tran",
"membership" : [
{
"package" : 1.0,
"time" : "months",
"active" : true,
"start" : ISODate("2017-09-26T09:57:37.638Z")
}
]
}