18

我在 MongoDB 中有一个文档,我想获取该文档的 ObjectId,但到目前为止我还没有找到对我执行此操作的方法。

查询示例:

 user= db.users.find({userName:"Andressa"})

这将返回:

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

我想让 ObjectId 做另一个查询。

例子:

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

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

 userFind = db.users.find({_id: userID})

更新:此代码:

 db.teams.find({_id:{$in: user.teams}})

返回此错误:

error: {
    "$err" : "Can't canonicalize query: BadValue $in needs an array",
    "code" : 17287

有人知道吗?

4

7 回答 7

19

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

user._id.str

或者

user._id.toString()

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

于 2014-07-03T15:56:14.607 回答
9

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

而不是只放:

user = db.users.findOne({userName:"And"})

我只是:

  var user = db.users.findOne({userName:"And"})

  user._id 

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

var Id = user._id. 

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

于 2014-07-03T16:07:50.620 回答
2

我遇到了我认为相同的问题 - 如何从未知的 mongo 文档中检索 ObjectId。我已经构建了一个通用数据上下文,并且在我的更新和删除方法中需要 _id。在寻找有关如何执行此操作的答案时发现了您的问题,我决定发布最终对我有用的内容。

private BsonValue GetId<TEntity>(TEntity entity)
{
    var bsonDoc = entity.ToBsonDocument();
    return bsonDoc.GetElement("_id").Value;
}

然后我使用它是这样的:

 var id = GetId<TEntity>(entity);
 var filter = builder.Eq("_id", id);
 var doc = collection.Find(filter).SingleOrDefault();

希望这可以帮助。

于 2017-02-01T23:36:47.113 回答
0

您可以使用 find() 方法来实现这一点。

db.collection.find() 方法不返回实际文档,而是将光标返回到文档。通过遍历光标,您将获得该文档中的字段。

代码 :

    var cursor=db.collection.find()

    var objectId= cursor.next()._id

上面的语句从当前游标实例中获取 ObjectId 的值。如果您检索所有 objectId,然后通过游标迭代,您将获得 ObjectId 的所有值。

要使用第一步中收到的 objectId 直接查找文档,您可以使用以下代码段:

       db.collection.find( { "_id": objectId},{ fields Of Your Choice } )
于 2014-07-29T19:45:33.293 回答
0

使用 MongoDB Node.js 驱动器和 ES6 解构

const { _id } = db.collection("users").findOne({ userName:"Andressa" })

或者更好的是,在重组时重命名它......

const { _id: userId } = db.collection("users").findOne({ userName:"Andressa" })

然后可以根据需要在代码中使用 userId ...

于 2020-06-30T13:15:37.840 回答
0

我认为您正在寻找的是获取 id 的值:

user= db.users.find({userName:"Andressa"})
.then(data=>return data._id.valueOf())
.catch(err=>console.log(err));
于 2022-01-05T22:26:09.637 回答
0

试试这个(对于节点 v12.16.3 / MongoDB MongoDB v4.2.6)

// find if a value exists
collection.find({ "criteria1": value1, "criteria2": value2 }).toArray
(function(err, doc) {

    if (err) {
        console.log('Error, Please Try Again');
    }
    else if (doc.length === 0) {
        console.log('Does Not Exist');
    } else {
        console.log(doc);
        console.log(doc[0]._id)
    }
});
于 2020-05-18T11:04:28.470 回答