我有一个下拉列表需要为Mongo中的特定文档触发findOne。我希望它只返回它找到值的数组。
下拉列表html:
<select class="form-control" id="saved_config" name="saved_config">
{{#each currentUser.profile.saved_configs}}
<option value="{{config}}">{{config}}</option>
{{/each}}
</select>
拉动&#34; config&#34;来自每个&#34; saved_configs&#34;的字段值数组当前位于当前用户的个人资料部分。
下拉列表js:
"change #saved_config": function(event, template) {
var selected = $( "#saved_config option:selected" ).text();
var search = Meteor.users.findOne({_id:Meteor.user()._id}, {'profile.saved_configs.$' : selected});
console.log(search)
},
听取下拉列表更改并找到一个包含&#34; _id&#34;的文档。使用当前用户的ID,并搜索&#34; saved_configs&#34;中的所有数组。对于下拉选择的文本。
问题在于,无论我设置什么值,它都会返回整个文档&#34; profile.saved_configs。$&#34;如。我还希望它只返回它找到下拉文本的数组。这样我就可以轻松地检索同一数组中的其余值。
这是doc架构 -
_id:
配置文件:
答案 0 :(得分:0)
我认为您正在寻找this functionality
但是,流星文档声明:Field operators such as $ and $elemMatch are not available on the client side yet.
然而,由于您在客户端上有完整的文档,因此在javascript中选择正确的数组应该很简单。即使你有Field Operator支持,这一切都发生在客户端(并且你没有从服务器请求额外的数据)所以在我看来,在javascript中执行它没有任何缺点。
我猜测saved_configs中项目的结构,但代码是这样的:
"change #saved_config": function(event, template) {
var selected = $( "#saved_config option:selected" ).text();
var _search = Meteor.users.findOne({_id:Meteor.user()._id});
var search = _search.profile.saved_configs.filter(
function(config){
return config.name === selected;
})[0] // .filter returns array, select first (only) item
console.log(search)
},