douyan0732 2018-11-30 20:36
浏览 483

在查找中使用$ slice

I have a mongodb document which contains an array called "data". I want to be able to only get certain ranges from the array.In robo 3T I am able to run db.getCollection('collection').find({"_id": "user1"},{data:{$slice:[1,4]]} ) to get 4 elements from the data array from position 1.

How can I run the same query in golang?

What I tried:

c.Find(bson.M{"_id":"user1" , "data":bson.M{"$slice":[]int{1,4}}}  )

but i get "unknown operator $slice" Not sure what to do. Any help please?

Mongo Doc

{
  "_id": "user1",
  "time": 32467777,

 "data": [

     88,
     45,
     1,
     4,
     7,
     123,
      33,
     132

 ]


}
  • 写回答

1条回答 默认 最新

  • doulu8537 2018-12-01 07:25
    关注

    The second argument you pass to MongoDB's find() is a projection, for which the equivalent in mgo is the Query.Select().

    So you may do what you want like this:

    var results bson.M
    err := c.Find(
        bson.M{"_id": "user1"},
    ).Select(
        bson.M{"data": bson.M{"$slice": []int{1, 4}}},
    ).One(&results)
    

    Also note that to query something exclusively by its ID, you may use the Collection.FindId(), so you may write it more compact like this:

    var results bson.M
    err := c.FindId("user1").Select(
        bson.M{"data": bson.M{"$slice": []int{1, 4}}},
    ).One(&results)
    
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)