【发布时间】:2022-01-18 10:48:10
【问题描述】:
我有以下文件信息。
[
{
_id: ObjectId("61d67f0a74ec8620f34c57ed"),
shot: [
{
shotId: "undefinedMKSf*Tf#!qHxWpz1hPzUBTz%",
clubType: "driver",
shotCount: 20,
unit: "meter",
_id: ObjectId("61d67f0a74ec8620f34c57ef"),
createdAt: ISODate("2022-01-06T05:32:58.391Z")
},
{
shotId: "undefinedMKSf*Tf#!qHxWpz1hPzUBTz%",
clubType: "wood",
shotCount: 20,
unit: "meter",
_id: ObjectId("61d67f0a74ec8620f34c57f0"),
createdAt: ISODate("2022-01-08T05:32:58.391Z")
},
{
shotId: "undefinedMKSf*Tf#!qHxWpz1hPzUBTz%",
clubType: "wood",
shotCount: 15,
unit: "yard",
_id: ObjectId("61d67f0a74ec8620f34c57f0"),
createdAt: ISODate("2022-01-08T05:32:58.391Z")
},
{
shotId: "undefinedMKSf*Tf#!qHxWpz1hPzUBTz%",
clubType: "wood",
shotCount: 15,
unit: "yard",
_id: ObjectId("61d67f0a74ec8620f34c57f0"),
createdAt: ISODate("2022-01-08T05:32:58.391Z")
}
]
}
]
在上面的文档中,如何才能只找到wood的clubType、15的shotCount和yard的unit的文档?
我写了如下查询语句,但是没有出预期的结果。
db.collection.aggregate([
{
"$match": {
_id: ObjectId("61d67f0a74ec8620f34c57ed"),
"shot.clubType": "wood",
shot: {
$elemMatch: {
$and: [
{
"createdAt": {
$gte: ISODate("2022-01-07T05:32:58.391Z")
}
},
{
"createdAt": {
$lte: ISODate("2022-01-09T05:32:58.391Z")
}
}
]
}
}
}
},
{
"$set": {
shot: {
"$filter": {
"input": "$shot",
"as": "s",
"cond": {
$and: [
{
"$eq": [
"$$s.clubType",
"wood"
]
},
{
"$gte": [
"$$s.createdAt",
ISODate("2022-01-07T05:32:58.391Z")
]
},
{
"$lte": [
"$$s.createdAt",
ISODate("2022-01-09T05:32:58.391Z")
]
}
]
}
}
}
}
}
])
如何修改查询语句?
- 参考链接:[MongoPlayGround]
【问题讨论】: