此查询可用于过滤12/2018帖子。
db.collection.find({
"$expr": {
"$eq": [{ "$year": "$timestamp" }, 2018],
"$eq": [{ "$month": "$timestamp" }, 12]
}
});
但是,如果我反转年份和月份,则会显示所有2018年的帖子。
db.collection.find({
"$expr": {
"$eq": [{ "$month": "$timestamp" }, 12],
"$eq": [{ "$year": "$timestamp" }, 2018]
}
});
那是为什么?我不明白。
答案 0 :(得分:1)
JavaScript对象的同名键不能超过一个,但是您在这里两次使用$eq
键,因此仅使用第二个。
相反,请使用$and
组合两个表达式:
db.collection.find({
"$expr": {
"$and": [
{"$eq": [{ "$year": "$timestamp" }, 2018]},
{"$eq": [{ "$month": "$timestamp" }, 12]}
]
}
});