2 回答
TA贡献1852条经验 获得超1个赞
您的代码中有两个错误:
1.bson.M中的数组
bson.M["$$ans.status","Active",]
会给你错误Type bson.M is not an expression
,因为在这种情况下你不需要键值对,字符串数组将是一个更好的情况。
尝试:
[]string{"$$ans.status","Active",}
2.逗号
根据https://golang.org/doc/effective_go.html:
词法分析器总是在标记后插入一个分号。这可以概括为“如果换行符出现在可以结束语句的标记之后,则插入分号”。
如果您没有在 之后附加逗号}
,则词法分析器将为;
您插入一个,这将导致您当前的问题。
"$filter":bson.M{"input":"$answer","as":"ans","cond":bson.M{"$eq":bson.M{"$$ans.status","Active",},},} // should add a comma at the end of the line
修改后:
"$filter":bson.M{"input":"$answer","as":"ans","cond":bson.M{"$eq":[]string{"$$ans.status","Active",},},},
更新
对于您的第二个问题,$expressions are not allowed at the top-level of $project
请注意聚合mongodb
只接受array
,您可以参考此链接https://docs.mongodb.com/v3.0/reference/operator/aggregation/:
db.collection.aggregate( [ { <stage> }, ... ] )
TA贡献1772条经验 获得超6个赞
做完这一切之后
o2 := bson.M{
"$project":bson.M{"_id":1,"title":1,"postdatetime":1,"status":1"answer":bson.M{
"$filter":bson.M{"input":"$answer","as":"ans","cond":bson.M{"$eq":[]string{"$$ans.status","Active",},},},},},}
- 2 回答
- 0 关注
- 146 浏览
添加回答
举报