2016-03-06 85 views
0

这已被问过,但没有一个答案是我自己可以理解的。Meteor Mongo使用ObjectID查找文档

使用流星,我将一个名为Scrdata的集合拉入Select/Option中。这工作正常。在选项内部,我插入该文档的_id。它一切正常。

<select class="selectfile"> 
<option>Click to Select</option> 
{{#each cwCasesPending}} 
<option value="{{_id}}">{{> allcase}}</option> 
{{/each}} 
</select> 

<template name="allcase"> 
<div > {{last_name}}, {{first_name}}: {{facility}} - {{cwname}}</div> 
</template> 

我试图做什么应该是一个非常简单的事情,它的ID找到一个文件:

Template.caselist.events({ 
'change .selectfile': function(event, tmpl){ 
var ar = Scrdata.findOne({_id: $(event.target).val()}); 
console.log($(event.target).find('option:selected').val()); 
console.log(ar); 
} 
}); 

在控制台的结果是:

ObjectID("56dab90a73176cc2deb25aaa") 
undefined 

我的目标在选择块中发生变化时,将在该页面上填充表单。但是,通过_id查找不起作用。

我很感激任何见解和指导。谢谢。

+0

控制台日志没有相同的基本信息。使用findOne,您只需使用'$(event.target).val()'而不是'$(event.target).find('option:selected')。val()'。尝试一次只使用已知的_id,例如'var ar = Scrdata.findOne({_ id:“known_id”});' –

+0

@ user2690440看起来您正在使用ObjectID,因此您可能需要[转换它们] ://stackoverflow.com/questions/29462623/convert-string-to-mongo-objectid-in-javascript-meteor)在调用findOne之前。 –

回答

0

你的场合的基本思想是通过使用id作为过滤器从数据库中提取文档。如果上面的代码不工作,你可以尝试几种方法来解决这个问题:

第一种方式是尝试:

var id = $(event.target).find('option:selected').val(); 
var ar = Scrdata.findOne({_id: id}); 

如果没有明显的工作$(event.target).find('option:selected').val()返回一些对象。在控制台上打印这个对象。查看它的属性(如果上面打印的代码是你现在收到的,至少其中一个是id)。然后再次使用:

var id = $(event.target).find('option:selected').val().(the property of the object); 

我在面对类似问题时使用这种方式。希望它能为你工作。 请参阅this问题:

+0

如果我console.log($(event.target).find('option:selected')。val()),我得到未定义。我也注意到,当我做一个Scrdata.find()。fetch()时,我用$(this).find('option:selected')。val()获得了一个3,000个对象的数组 – user2690440

+0

。我正在编辑我的答案,将您链接到另一个问题,但我认为这应该可以解决您的问题。 – StefanL19

+0

如果我把它放在事件中:\t'change #selectfileNew':function(event){ \t \t var id = $(event.target).find('option:selected')。val(); \t \t console.log(id); \t \t var ar = Scrdata.findOne({_ id:id}); \t \t console.log(ar); \t}我在控制台ObjectID(“56dab90a73176cc2deb25af5”)和未定义。可能我的问题是我从