Как получить все записи в mongodb, имеющие идентификатор объекта - PullRequest
0 голосов
/ 03 июля 2018

В mongodb есть пользовательские данные, которые были сохранены в коллекции challange данные выглядят так:

{
"_id" : 1,
 "name" : "puneet",
 "last" : "jindal",
 "email" : "puneet@g.com"
}
{
 "_id" : ObjectId("5b3af82cdb3aaa47792b5fd3"),
 "name" : "hardeep",
 "last" : "singh",
 "email" : "hardeep@g.com"
}
{ 
 "_id" : 3,
 "name" : "gaurav",
 "last" : "bansal",
 "email" : "gaurav@g.com"
}
{
 "_id" : ObjectId("5b3af87ddb3aaa47792b5fd4"),
 "name" : "manish",
 "last" : "jindal",
 "email" : "manish@g.com"
}

В приведенных выше данных есть четыре записи, две из которых имеют идентификатор в целочисленной форме, а другие будут иметь идентификатор в виде объекта. Я просто хочу получить все записи, которые имеют object id в поле id. Кто-нибудь может сказать, какой запрос я должен написать в коде, который будет извлекать только те записи, которые имеют идентификатор объекта.

Обновлен:

код, который я использую:

type User struct {
 Id              bson.ObjectId    `json:"_id" bson:"_id,omitempty"`
 Name            string    `json:"name,omitempty" bson:"name,omitempty"`
 Last            string `json:"last,omitempty" bson:"last,omitempty"`
 Email          string `json:"email,omitempty" bson:"email,omitempty"`
}
type Users []User

func GetAllUsers(listQuery interface{}) (result Users, err error) {
 mongoSession := config.ConnectDb()
 sessionCopy := mongoSession.Copy()
 defer sessionCopy.Close()
 getCollection := mongoSession.DB(config.Database).C(config.UsersCollection)
 err = getCollection.Find(listQuery).Select(bson.M{"password": 0}).All(&result)
 if err != nil {
    return result, err
 }
 return result, nil
}

conditions := bson.M{'_id': bson.M{'$type': "objectId" } }
data, err := models.GetAllUsers(conditions) 

Ошибка, с которой я сталкиваюсь при использовании этого: -

controllers / UserController.go: 18: 23: недопустимый символьный литерал (более одного символа) controllers / UserController.go: 18: 28: нельзя использовать «\ u0000» (тип руны) в качестве строки типа в ключе карты

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Вы можете попробовать как ниже

//For Retrieving for ObjectID
db.challange.find(
    {
        "_id": {
            $type: 7  //ObjectID
        }
    }
)

//For Retrieving for Number
db.challange.find(
    {
        $or: [
            {
                "_id": {
                    $type: 1  //double
                }
            },
            {
                "_id": {
                    $type: 16  //32 bit integer
                }
            },
            {
                "_id": {
                    $type: 18  //64 bit integer
                }
            },
            {
                "_id": {
                    $type: 19  //decimal
                }
            }
        ]
    }
)

См. $ тип , $ или

0 голосов
/ 03 июля 2018

'_id' и '$type' недопустимы литералы рун , вы не можете перечислить несколько рун (символов) в литерале руны (только одну руну).

Тип bson.M - это карта с типом ключа string, поэтому вы должны использовать строковые литералы (или выражения), например:

conditions := bson.M{"_id": bson.M{"$type": "objectId"}}

Также обратите внимание, что пакет bson содержит константы для различных типов, поэтому безопаснее использовать эти константы:

conditions := bson.M{"_id": bson.M{"$type": bson.ElementObjectId}}
0 голосов
/ 03 июля 2018

Вы можете использовать $ type оператор:

db.challenge.find({ _id: { $type: "objectId" } })
...