Как получить все записи в mongodb с идентификатором объекта

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

{
"_id" : 1,
 "name" : "puneet",
 "last" : "jindal",
 "email" : "[email protected]"
}
{
 "_id" : ObjectId("5b3af82cdb3aaa47792b5fd3"),
 "name" : "hardeep",
 "last" : "singh",
 "email" : "[email protected]"
}
{ 
 "_id" : 3,
 "name" : "gaurav",
 "last" : "bansal",
 "email" : "[email protected]"
}
{
 "_id" : ObjectId("5b3af87ddb3aaa47792b5fd4"),
 "name" : "manish",
 "last" : "jindal",
 "email" : "[email protected]"
}

В приведенных выше данных есть четыре записи, две из которых имеют идентификатор в целочисленной форме, а другие будут иметь идентификатор в форме объекта. Я просто хочу получить все записи, которые имеют 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) 

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

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


person ansh    schedule 03.07.2018    source источник
comment
Нет. Я никогда не использовал MongoDB. Я не знаю, почему вы предполагаете, что кто-то, кто улучшит ваше форматирование, будет экспертом в предметной области по вашему конкретному вопросу. Но у вас уже есть несколько ответов.   -  person Flimzy    schedule 03.07.2018
comment
@flimzy, эти ответы верны, если мы запустим это в оболочке mongodb, но мне нужно сделать это как запрос в golang   -  person ansh    schedule 03.07.2018


Ответы (3)


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

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

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

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

conditions := bson.M{"_id": bson.M{"$type": bson.ElementObjectId}}
person icza    schedule 03.07.2018
comment
Спасибо за отличный ответ - person ansh; 03.07.2018

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

db.challenge.find({ _id: { $type: "objectId" } })
person mickl    schedule 03.07.2018
comment
тогда как это будет написано, вы можете сказать мне, сэр @mickl - person ansh; 03.07.2018
comment
@ansh в вашем вопросе не было ничего о go :) Вам нужно прочитать документацию, возможно, здесь: godoc.org/labix.org/v2/mgo#Collection.Find - person mickl; 03.07.2018
comment
см. Я использую такой запрос: «conditions: = bson.M {'_ id': bson.M {'$ type': objectId}} data, err: = models.GetAllUsers (conditions)` - person ansh; 03.07.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
                }
            }
        ]
    }
)

Обратитесь к $ type, $ или

person Ratan Uday Kumar    schedule 03.07.2018
comment
Подскажите, пожалуйста, как я напишу запрос на go lang - person ansh; 03.07.2018
comment
обратитесь к этому документу goinbigdata.com/ - person Ratan Uday Kumar; 03.07.2018
comment
см. @ratanUdayKumar Я тоже так пишу, но это выдает ошибкуconditions := bson.M{'_id': bson.M{'$type': "objectId" } } data, err := models.GetAllUsers(conditions) - person ansh; 03.07.2018