如何获取mongodb中具有对象ID的所有记录

时间:2018-07-03 05:16:11

标签: mongodb go mongodb-query mgo

在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"
}

在上述数据中,有四个记录,其中两个记录的ID以整数形式出现,其他记录的ID以对象形式出现。我只想检索id字段中有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 :(得分:6)

'_id''$type'无效rune literals,您不能在符文文字(仅单个符文)中列出多个符文(字符)。

bson.M类型是具有string键类型的映射,因此您必须使用string literals(或表达式),如下所示:

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

还请注意,bson包针对不同类型持有constants,因此使用这些常量更为安全:

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

答案 1 :(得分:1)

您可以使用$type运算符:

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

答案 2 :(得分:1)

您可以尝试以下操作

<body>
  <div class="form-panel">
    <div class="form-name">
      <input type="text" name="fname" placeholder="First Name">
      <input type="text" name="lname" placeholder="Last Name">
      <br>
    </div>
    <div class="form-email">
      <input type="email" name="email" placeholder="Email Address">
      <br>
    </div>
    <div class="form-password">
      <input type="password" name="password" placeholder="Password">
      <input type="password" name="cpassword" placeholder="Comfirm Password">
    </div>
  </div>
  <input type="submit" class="btn btn-default submit-button" value="Sign up!">


</body>

引用$type$or