我有一个日期列表,我正在$regex
找到这些值,但我想只显示查询的值。
存储在集合中的数据:
{
"Pid" : "5652f92761be0b14889d9854",
"Registration" : "TN 56 HD 6766",
"Booked" : [
"1-10-2015",
"6-10-2015",
"11-12-2015",
"16-12-2015",
"10-12-2015"
],
"Vid" : "56543ed261be0b0a60a896c9"
}
我像这样进行搜索
db.calendar2.find({"Pid" : "5652f92761be0b14889d9854","Registration" : "TN 56 HD 6766","Booked" : {"$regex": "10-2015"}})
来自我的python程序。
我得到的输出。
{
"Pid" : "5652f92761be0b14889d9854",
"Registration" : "TN 56 HD 6766",
"Booked" : [
"1-10-2015",
"6-10-2015",
"11-12-2015",
"16-12-2015",
"10-12-2015"
],
"Vid" : "56543ed261be0b0a60a896c9"
}
期望的输出
{
"Pid" : "5652f92761be0b14889d9854",
"Registration" : "TN 56 HD 6766",
"Booked" : [
"1-10-2015",
"6-10-2015"
],
"Vid" : "56543ed261be0b0a60a896c9"
}
任何人都可以指导我
修改 我已经尝试过,但我没有得到输出,我只想要显示匹配正则表达式条件的特定日期集
答案 0 :(得分:1)
以下是使用聚合框架实现所需目标的一种方法:
- 取消预订数组
- 匹配您想要的文档(以及已展开的数组元素)
- 通过过滤器将结果组合在一起,并将未展开的数组元素推回Booked
- 投射结果以解压缩组对象中的值
db.calendar2.aggregate([{
$unwind: "$Booked"
}, {
$match: {
"Pid": "5652f92761be0b14889d9854",
"Registration": "TN 56 HD 6766",
"Vid": "56543ed261be0b0a60a896c9",
"Booked": /10-2015/
}
}, {
$group: {
_id: {
Pid: "$Pid",
Registration: "$Registration",
Vid: "$Vid"
},
Booked: {
$push: "$Booked"
}
}
}, {
$project: {
Pid: "$_id.Pid",
Registration: "$_id.Registration",
Vid: "$_id.Vid",
Booked: 1,
_id: 0
}
}]);
答案 1 :(得分:0)
当您在MongoDB中找到具有特定条件的文档时。查找返回此文档。但你可以“投射”只获得某些领域。它是find method的第二个参数。
我认为在这种情况下你可以这样做:
db.calendar2.find({"Pid" : "5652f92761be0b14889d9854","Registration" : "TN 56 HD 6766","Booked" : /10-2015/ }, {"Booked.$": /10-2015/ } )
使用$ operator和//而不是$ regex(相同)。
它的工作原理是什么?