如何在MongoDB中返回文档的ObjectId或_id?和错误"$ in需要一个数组"

deb*_*eka 9 mongodb nosql objectid

我在MongoDB中有一个文档,我想得到这个文档的ObjectId,但到目前为止我还没有找到一个对我这样做的方法.

查询示例:

 user= db.users.find({userName:"Andressa"})
Run Code Online (Sandbox Code Playgroud)

这返回:

 { "_id" : ObjectId("53b1c579bdf3de74f76bdac9"), "userid" : 0, "userName" : "Andressa", "userEmail" : "dessa_beca@hotmail.com", "teams" : [ 1, 2, 3 ] }
Run Code Online (Sandbox Code Playgroud)

我想让ObjectId做另一个查询.

例:

 userID =  `user._id();` //but this does not work, of course, its an example
Run Code Online (Sandbox Code Playgroud)

所以,我可以使用ObjectId来执行另一个查询,如下所示:

 userFind = db.users.find({_id: userID})
Run Code Online (Sandbox Code Playgroud)

更新:此代码:

 db.teams.find({_id:{$in: user.teams}})
Run Code Online (Sandbox Code Playgroud)

返回此错误:

error: {
    "$err" : "Can't canonicalize query: BadValue $in needs an array",
    "code" : 17287
Run Code Online (Sandbox Code Playgroud)

有人知道吗?

kra*_*teg 8

在mongo shell中,您可以使用它来检索_id

user._id.str
Run Code Online (Sandbox Code Playgroud)

要么

user._id.toString()
Run Code Online (Sandbox Code Playgroud)

请参阅文档:http : //docs.mongodb.org/manual/reference/method/ObjectId.valueOf/


deb*_*eka 7

我知道了!实际上,我可以通过以下代码做到这一点:

而不是只放:

user = db.users.findOne({userName:"And"})
Run Code Online (Sandbox Code Playgroud)

我只是:

  var user = db.users.findOne({userName:"And"})
Run Code Online (Sandbox Code Playgroud)

  user._id 
Run Code Online (Sandbox Code Playgroud)

返回 ObjectId("someId") ,如果我想将它保留在某个变量中,我会这样做:

var Id = user._id. 
Run Code Online (Sandbox Code Playgroud)

关于第二个问题,我不知道。

  • 已经 3 年了,但有人可能会发现它很有用:`db.users.find({userName: "And"})[0]._id` (14认同)