Reputation: 35
In the mongodb there is a user data has been stored in collection challange
the data seems like bellow:
{
"_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]"
}
In the above data there are four records and two of them having id in the integer form and other will having id in object form. I just want to retrieve the all the records which are having the object id
in the id field. can anyone tell what query should I write in the code that will only retrieve that records which are having the object id.
Updated:
code I'm using :
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)
The error I'm facing by using this :-
controllers/UserController.go:18:23: invalid character literal (more than one character) controllers/UserController.go:18:28: cannot use '\u0000' (type rune) as type string in map key
Upvotes: 1
Views: 3504
Reputation: 418575
'_id'
and '$type'
are invalid rune literals, you can't list multiple runes (characters) in a rune literal (only a single rune).
The bson.M
type is a map with string
key type, so you have to use string literals (or expressions), like this:
conditions := bson.M{"_id": bson.M{"$type": "objectId"}}
Also note that the bson
package holds constants for the different types, so it's safer to use those constants:
conditions := bson.M{"_id": bson.M{"$type": bson.ElementObjectId}}
Upvotes: 7
Reputation: 6512
You can try like below
//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
}
}
]
}
)
Upvotes: 1