假设我有一个类似于557fba5a8032a674d929e6a1
的id字符串,它存储在会话中。我尝试检索_id
与上面相同的文档,但即使它存在,我也找不到它。
Posts.findOne({_id: "557fba5a8032a674d929e6a1"});
返回undefined。现有对象如下所示:
我可以通过
来实现它var id = "557fba5a8032a674d929e6a1";
var posts = Posts.find().fetch();
var post = _.filter(posts, function (post) { return post._id._str === id });
return post
但看起来很脏。这是我的控制台输入和输出,以进一步调查此行为(Posts == Applicants
)。你会注意到,即使我们正在寻找的文件肯定存在,我也找不到它。
答案 0 :(得分:8)
您必须将_id定义为Mongo.ObjectID
才能正确表示ObjectID类型。
Posts.findOne({_id: new Mongo.ObjectID("557fba5a8032a674d929e6a1") });
使用Meteor的ObjectIDs的一个警告是它们的时间戳不正确。特别是如果它们被插入客户端。
答案 1 :(得分:1)
Akshat的答案可能会有效,但是new Mongo.ObjectID("557fba5a8032a674d929e6a1")
会生成一个新ID,如果您尝试更新记录或查找记录,则无法找到任何记录。
我会做这样的事情:
function findPostById(id) {
let newMongoObjectId = new Mongo.Collection.ObjectID();
newMongoObjectId._str = id;
Posts.findOne({_id: newMongoObjectId._str});
}
答案 2 :(得分:0)
这对我有用:
{{1}}
希望有所帮助