流星找到一个id的对象

时间:2015-06-17 07:23:48

标签: meteor

假设我有一个类似于557fba5a8032a674d929e6a1的id字符串,它存储在会话中。我尝试检索_id与上面相同的文档,但即使它存在,我也找不到它。

Posts.findOne({_id: "557fba5a8032a674d929e6a1"});

返回undefined。现有对象如下所示:

enter image description here

我可以通过

来实现它
var id = "557fba5a8032a674d929e6a1";
var posts = Posts.find().fetch();
var post = _.filter(posts, function (post) { return post._id._str === id });
return post

但看起来很脏。这是我的控制台输入和输出,以进一步调查此行为(Posts == Applicants)。你会注意到,即使我们正在寻找的文件肯定存在,我也找不到它。

enter image description here

3 个答案:

答案 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}}

希望有所帮助