Dek*_*eka 6 mongodb aggregation-framework
我有一个"类"文件:
{
className: "AAA",
students: [
{name:"An", age:"13"},
{name:"Hao", age:"13"},
{name:"John", age:"14"},
{name:"Hung", age:"12"}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望得到名字为"An"的学生,只获得数组"学生"中的匹配元素.我可以用函数find()做到这一点:
>db.class.find({"students.name":"An"}, {"students.$":true})
{
"_id" : ObjectId("548b01815a06570735b946c1"),
"students" : [
{
"name" : "An",
"age" : "13"
}
]}
Run Code Online (Sandbox Code Playgroud)
这很好,但是当我使用Aggregation执行相同操作时,会出现错误:
db.class.aggregate([
{$match:{"students.name":'An'}},
{$project:{"students.$":true}}
])
Run Code Online (Sandbox Code Playgroud)
错误是:
uncaught exception: aggregate failed: {
"errmsg" : "exception: FieldPath field names may not start with '$'.",
"code" : 16410,
"ok" : 0
}
Run Code Online (Sandbox Code Playgroud)
为什么?我不能在aggregate()的$ project运算符中使用"$"作为数组,而在find()的项目运算符中可以使用这个.
小智 1
尝试在管道中使用展开运算符:http://docs.mongodb.org/manual/reference/operator/aggregation/unwind/#pipe._S_unwind
你的聚合看起来像
db.class.aggregate([
{ $match: { "students.name": "An" },
{ $unwind: "$students" },
{ $project: { "students": 1 } }
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3657 次 |
| 最近记录: |