Mongodb Meteor:访问嵌套对象中的一个属性

Mongodb Meteor:访问嵌套对象中的一个属性,mongodb,meteor,Mongodb,Meteor,我有一个MongoDB查询,它返回一个对象(文档) var myFavSports=Profile.findOne({userId:currentUser,'favsports.name':league})由于Minimongo尚不支持中的运算符,解决方法是对返回的数组使用方法来过滤元素: var query = { "userId": currentUser, "favsports.name": league }; var myFavSports = Profile.findOn

我有一个MongoDB查询,它返回一个对象(文档)


var myFavSports=Profile.findOne({userId:currentUser,'favsports.name':league})由于Minimongo尚不支持中的运算符,解决方法是对返回的数组使用方法来过滤元素:

   var query = { "userId": currentUser, "favsports.name": league };
   var myFavSports = Profile.findOne(query).favsports
                            .filter(function(s) { 
                                return s.name === league 
                            })[0] ;

console.log(myFavSports); // logs { name: "GER Bund", selfrank: "3"}
console.log(myFavSports.name); // logs "GER Bund"
console.log(myFavSports.selfrank); // logs "3"

在mongo shell中,您可以在投影中使用操作符,因为这将自动限制查询结果中
favsports
数组的内容,使其仅包含与查询文档匹配的第一个元素。因此,您可以按如下方式获得所需的对象:

var query = { "userId": currentUser, "favsports.name": league },
    projection = { "_id": 0, "favsports.$": 1 },
    myFavSports = db.profile.findOne(query, projection).favsports[0];

console.log(myFavSports); // logs { name: "GER Bund", selfrank: "3"}
console.log(myFavSports.name); // logs "GER Bund"
console.log(myFavSports.selfrank); // logs "3"

然后在
favsports
上迭代以找到一个合适的名称。你是指内部模板还是模板助手?这听起来很有趣,但是得到一个错误:6debug.js:41模板帮助程序中的异常:MinimongoError:Minimongo在投影中还不支持$operator。@FloridaGard我已经更新了解决方案,以包含此约束的解决方法。很抱歉,仍然不行。另一个错误:模板帮助程序中的异常:错误:您可能无法观察到带有{fields:{u id:0}}的光标。很抱歉,我没有测试过这个,所以您可能想再试一次,这种情况下的投影不是很必要,因为您将筛选
favsports
属性。@FloridaGard不用担心,很乐意帮助:)