我试图从我的MongoDB示例中的集合中检索一些文档。这里是整个集合:
[
{
_id: ObjectId("65708c6237b62067296a398f"),
date: ISODate("2020-09-15T04:07:05.000Z"),
description: 'playstation',
category: 'miscellaneous',
cost: 499,
users: [ { username: 'Giacomo', amount: 499 } ]
},
{
_id: ObjectId("6570950cecb7eb1b4b868409"),
date: ISODate("2020-09-15T04:07:05.000Z"),
description: 'tennis court',
category: 'sport',
cost: 100,
users: [
{ username: 'prova', amount: 50 },
{ username: 'Giacomo', amount: 50 }
]
},
{
_id: ObjectId("6570953aecb7eb1b4b86840a"),
date: ISODate("2023-02-09T03:12:15.012Z"),
description: 'netflix subscription',
category: 'entertainment',
cost: 100,
users: [ { username: 'prova', amount: 10 } ]
}
]
字符串
目前,我可以通过以下查询检索具有特定年份的文档,作为date
值的一部分:
db
.collection("expenses")
.find({
"users.username": "desired_username",
$expr: { $eq: [{ $year: "$date" }, 2020] },
})
型
下一步,我想检索的文档不仅有特定的年份,还有特定的月份(例如,2020年9月应该返回前两个文档)。我不知道如何在查询中使用两个不同的表达式。
谁能帮我解决这个问题?
感谢您的耐心等待。
2条答案
按热度按时间ldfqzlk81#
用最简单的话来说,
字符串
playground
或者,如果你想要更花哨的,你可以用这样的东西与日期字符串格式(需要mongo 7使用
%B
和获得月份名称)型
这在mongoplayground中不起作用,因为它运行在较低的mongo版本上。
或者一些可能在旧版本上运行的东西,
型
playground的
好吧,最后一个只是为了好玩,但我想这是太多了,使查询很难理解的时候(这正是在第二种方法显示的较长版本)
型
playground的
fhg3lkii2#
您可以修改的一个简单方法是利用
$gt
,$gte
,$lt
和$lte
比较运算符来指定开始和结束日期,以缩小查询范围。下面我们有大于或等于2020年9月1日但小于2020年10月1日:字符串