说我的mongo客户集合中有以下数据
{customer:"cust1",
shops:[
{name:"shop_name1", sales:200},
{name:"shop_name2", sales:300}
]}
在mongo shell中我可以执行此命令,并返回商店数组中shop_name2的索引,该数组为1
db.customers.aggregate([{"$match":{customer:"cust1"}},{"$project":{"matchedIndex":{"$indexOfArray":["$shops.name","shop_name2"]}}}])
然而在mgo
err := c.Pipe([]bson.M{{"$match": bson.M{"customer": "cust1"}}, {"$project": bson.M{"matchedIndex": bson.M{"$indexOfArray": []bson.M{{"$shops.name": "shop_name2"}}}}}}).One(&hehehe)
失败并显示以下消息
无法识别的表达式'$ shops.name'
当我查看$indexOfArray的文档时,我注意到第二个参数是一个数组。所以我怀疑我指的是错误的数组但我找不到任何关于如何为mgo设置这个的参考。
答案 0 :(得分:2)
$indexOfArray
的参数只是"字符串"的列表。所以[]string
:
bson.M{"$indexOfArray": []string{"$shops.name", "shop_name2"}}
或者在完整的背景下:
err := c.Pipe([]bson.M{
{"$match": bson.M{"customer": "cust1"}},
{"$project": bson.M{
"matchedIndex": bson.M{"$indexOfArray": []string{"$shops.name", "shop_name2"}}
}}
}).One(&hehehe)