используйте $ slice в Find - PullRequest
       20

используйте $ slice в Find

0 голосов
/ 30 ноября 2018

У меня есть документ mongodb, который содержит массив под названием «данные».Я хочу иметь возможность получать только определенные диапазоны из массива. В Robo 3T я могу запустить db.getCollection('collection').find({"_id": "user1"},{data:{$slice:[1,4]]} ), чтобы получить 4 элемента из массива данных с позиции 1.

Как я могу выполнить тот же запросв golang?

Что я пробовал:

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

но я получаю "неизвестный оператор $ slice" Не уверен, что делать.Любая помощь, пожалуйста?

Монго Док

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

 "data": [

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

 ]


}

1 Ответ

0 голосов
/ 01 декабря 2018

Второй аргумент, который вы передаете в 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)

Также обратите внимание, что для запроса чего-либо исключительно по его идентификатору, вы можете использовать Collection.FindId(), так что вы можете написать это более компактнокак это:

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