【发布时间】:2016-09-26 18:48:33
【问题描述】:
我在 MongoDB 中使用 Meteor,但似乎无法弄清楚如何从对象数组中的对象访问单个字段。
我的文件:
{
"_id" : "p6c4cSTb3cHWaJqpG",
"createdAt" : ISODate("2016-05-11T11:30:11.820Z"),
"username" : "admin",
"contacts" : [
{
"when" : ISODate("2016-05-11T11:30:32.350Z"),
"who" : "4YBufbE9PByJBkasy"
},
{
"when" : ISODate("2016-05-25T11:52:49.745Z"),
"who" : "z792kEEYbxyzyEAKp"
},
{
"when" : ISODate("2016-05-26T13:47:43.439Z"),
"who" : "4YBufbE9PByJBkasy"
},
{
"when" : ISODate("2016-05-26T13:48:22.828Z"),
"who" : "4YBufbE9PByJBkasy"
}
]
}
我想检查userId 是否在任何对象中,特别是在who 字段中。
我的服务器端代码:
var me = Meteor.userId();
var findMe = Meteor.users.findOne(me);
if (_.include(findMe.contacts, {who: 4YBufbE9PByJBkasy})){
console.log("found in array");
}else{
console.log("Not found in array");
}
}
我已经尝试了几种不同的方法,但什么都没有。
当我console.log(findMe.contacts); 时,它会返回应有的整个数组。但是当我尝试console.log(findMe.contacts.who); 时,它返回undefined。
只需要一些关于如何访问对象数组字段的指导。谢谢!
【问题讨论】:
-
findMe.contacts是一个数组,它没有属性who,为了访问数组的元素之一,您必须提供如下索引:findMe.contacts[0].who -
这是有道理的。我试过了,但是看到你的我现在意识到我的语法是错误的。那么如何在
who字段中检查所有对象的字符串呢?对对象数量执行count之类的操作,然后对每个对象执行循环似乎比必要的工作更多,但我可能是错的。 -
如果不检查每个项目,就无法检查每个项目 :-) 此外,通过少量编辑,您可以拥有 minimal, complete, verifiable example。
标签: javascript arrays node.js mongodb meteor