我有一个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
]
}
答案 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)