为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 go 中编写这些 mongo 代码

如何在 go 中编写这些 mongo 代码

Go
慕神8447489 2022-01-10 14:54:25
我的 mongo 文件在这里 db.aaa.aggregate([{                $match : {                    status : "Active"                }            }, {                $project : {                    _id : 1,                    title : 1,                    postdatetime : 1,                    status : 1,                    answer : {                        $filter : {                            input : "$answer",                            as : "answe",                            cond : {                                $eq : ["$$answe.status", "Active"]                            }                        }                    }                }            }        ])我试试这个写进去o2 := bson.M{    "$project":bson.M{        "$answer":bson.M{                "_id":1,"title":1,"postdatetime":1,"status":1,"answer":bson.M{                            "$filter":bson.M{"input":"$answer","as":"ans","cond":bson.M{"$eq":bson.M["$$ans.status","Active",],},}                        },            },        },}但它在 err语法错误中显示了这一点 :意外逗号,期待]请帮帮我。After the answer i try this one   o2: = bson.M {    "$project": bson.M {        "$answer": bson.M {            "_id": 1,            "title": 1,            "revision": 1,            "bgimageurl": 1,            "author": 1,            "postdatetime": 1,            "status": 1,            "qatags": 1,            "followers": 1,            "qaviews": 1,            "answer": bson.M {                "$filter": bson.M {                    "input": "$answer",                    "as": "ans",                    "cond": bson.M {                        "$eq": "[$$ans.status][,Active]",                    },                },            },        },    },}这次编译成功,但是在运行 go 文件后,请向我发送这个 err msg 2016/05/11 11:04:17 $expressions are not allowed at the top-level of $project exit status 1
查看完整描述

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> }, ... ] )


查看完整回答
反对 回复 2022-01-10
?
梦里花落0921

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",},},},},},}


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信