这是我所拥有的文件的一个例子:
{ _id: "Y5nf7Hh6DskxjjMEZ",
createdAt: ISODate("2015-01-05T01:58:09.365Z"),
email_hash: "1basdfkjasldfsomethinghashedalsdjf23",
emails: [
{ address: "hermione@gmail.com",
verified: false }
],
isAdmin: false,
karma: 0,
postCount: 0,
profile: { email: "hermione@gmail.com",
notifications: { users: false,
posts: false
},
subscribed: true,
username: "hermione"
},
services: { password: { bcrypt: "$23098somethingencrypted23094" },
resume: { loginTokens: [] } },
slug: "Hermione",
status: { online: false },
username: "hermione"
}
我正在尝试返回所有电子邮件地址等同于SELECT emails.address FROM users
或SELECT profile.email FROM users;
我如何使用Mongo做到这一点?
答案 0 :(得分:1)
看起来人们认为这是一个正确的问题,所以这是你的解决方案:
var mails = [];
db.a.find({},{'emails.address' : 1}).forEach(function(o){
for (var i = 0; i < o.emails.length; i++){
mails.push(o.emails[i].address)
}
})
将它放在mongoshell中,邮件将包含您的所有电子邮件地址。请注意,每个文档至少应有一个地址。如果不是这种情况,请添加一行来验证它。
答案 1 :(得分:1)
由于字段电子邮件是一个数组,我建议您先使用$unwind(aggregation)
从数组中获取电子邮件,然后将结果与{{{ 1}},获取$project(aggregation)
SELECT emails.address FROM users