在查找中使用$ slice

时间:2018-11-30 20:36:53

标签: mongodb go mgo

我有一个mongodb文档,其中包含一个称为“数据”的数组。我希望只能从数组中获取特定范围。在robo 3T中,我可以运行db.getCollection('collection').find({"_id": "user1"},{data:{$slice:[1,4]]} )从位置1的数据数组中获取4个元素。

如何在golang中运行相同的查询?

我尝试过的:

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

但是我得到“未知运算符$ slice”不确定该怎么办。有什么帮助吗?

Mongo Doc

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

 "data": [

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

 ]


}

1 个答案:

答案 0 :(得分:1)

您传递给MongoDB的find()的第二个参数是一个投影,mgo中的等效项是Query.Select()

因此,您可以像这样做您想做的事情:

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

还要注意,要仅按其ID查询某些内容,您可以使用Collection.FindId(),这样您可以编写得更紧凑:

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