如何在Go中使用$ indexOfArray?

时间:2017-08-29 13:02:01

标签: mongodb go aggregation-framework mgo

说我的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设置这个的参考。

1 个答案:

答案 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)