我在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
有人知道吗?
答案 0 :(得分:5)
在mongo shell中,您可以使用它来检索_id
:
user._id.str
或
user._id.toString()
请参阅文档:http://docs.mongodb.org/manual/reference/method/ObjectId.valueOf/
答案 1 :(得分:3)
我明白了!实际上,我可以通过这段代码来实现:
而不仅仅是:
user = db.users.findOne({userName:"And"})
我做了:
var user = db.users.findOne({userName:"And"})
和
user._id
返回ObjectId(“someId”) ,如果我想把它保存在我做的某个变量中:
var Id = user._id.
关于第二个问题,我不知道。
答案 2 :(得分:2)
我遇到了我认为同样的问题 - 如何从未知的mongo文档中检索ObjectId。我已经构建了一个通用的datacontext,并且在我的更新和删除方法中需要_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();
希望这有帮助。
答案 3 :(得分: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 } )
答案 4 :(得分:0)
尝试一下(对于Node 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)
}
});
答案 5 :(得分:0)
使用MongoDB Node.js驱动器并进行ES6解构
const { _id } = db.collection("users").findOne({ userName:"Andressa" })
甚至更好,在重组时重命名...
const { _id: userId } = db.collection("users").findOne({ userName:"Andressa" })
然后可以根据需要在代码中使用userId ...