gpt4 book ai didi

mongodb - meteor :访问嵌套对象中的一个属性

转载 作者:可可西里 更新时间:2023-11-01 10:42:34 26 4
gpt4 key购买 nike

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

var myFavSports = Profile.findOne({userId: currentUser, 'favsports.name': league});

这是我记录到控制台的内容:

Object {_id: "sxberS7dGh3jwkann", userId: "59Pfb4MZy9WyAqqxc", userLevel: "Level 1", userLevelDescription: "Free Level", userLevelExpiration: Thu Jan 01 2099 00:00:00 GMT-0500 (EST)…}
_id: "sxberS7dGh3jwkann"
aboutMe: "Description not provided"
avatarImage: "http://meteor.com/images/avatarplaceholder.png"
favsports: Array[3]
0: Object
name: "GER Bund"
selfrank: "3"
__proto__: Object
1: Object
name: "NBA"
selfrank: "2"
__proto__: Object
2: Object
name: "NHL"
selfrank: "1"

所以,如果我向这个模板助手提供“GER Bund”,它应该返回 3 (selfrank)

相反,它返回整个文档,匹配用户 ID 和联赛,但我如何从中获取“3”以显示在模板中。

我试过 .notation,它总是返回“undefined”。我尝试以 myFavSports.favsports[0].rank 的形式打印到控制台,然后它可以工作,但它不是正确的匹配项,因为硬编码索引 0 不是匹配项。

最佳答案

因为 Minimongo 还不支持 positional $ 运算符在 field specifiers ,解决方法是使用 filter() 方法对返回的数组进行元素过滤:

   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 中,您将使用 positional $ 运算符,因为这会自动限制查询结果中 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"

关于mongodb - meteor :访问嵌套对象中的一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com