在mongodb中通过电子邮件选择数据
如何从用户集合中按Id选择电子邮件,如下所示:在mongodb中通过电子邮件选择数据,mongodb,robo3t,Mongodb,Robo3t,如何从用户集合中按Id选择电子邮件,如下所示: select emailAddress from users where _id="***" 我在mongo中这样选择它,但结果不是真的 db.getCollection('users').find({_id: "QYoHQkTuTXnEC6Pws"},{ "emails.0.address": 1}) 更新:示例文件 { "_id": "QYoHQkTuTXnEC6Pws", "createdAt": ISODate("2017-03
select emailAddress from users where _id="***"
我在mongo中这样选择它,但结果不是真的
db.getCollection('users').find({_id: "QYoHQkTuTXnEC6Pws"},{ "emails.0.address": 1})
更新:示例文件
{
"_id": "QYoHQkTuTXnEC6Pws",
"createdAt": ISODate("2017-03-09T06:21:29.664Z"),
"emails": [{
"address": "x@gmail.com",
"verified": true
}],
"isDeleted": false
}
查看您的查询,您希望只找到第一封电子邮件和给定ID的地址字段。根据预期的输出,您可以尝试以下查询并选择
我会给你所有的地址
db.users.find({_id:'QYoHQkTuTXnEC6Pws'}, { "emails.address": 1})
回应
{
"_id" : "QYoHQkTuTXnEC6Pws",
"emails" : [
{
"address" : "x@gmail.com"
},
{
"address" : "x2@gmail.com"
}
]
}
{
"emails" : [
{
"address" : "x@gmail.com"
}
]
}
将只提供阵列中的第一个电子邮件地址。您已显式删除所有其他字段
db.users.find({_id:'QYoHQkTuTXnEC6Pws'},
{ 'emails.verified':0, _id:0, createdAt: 0, isDeleted: 0, "emails": {$slice: 1}})
回应
{
"_id" : "QYoHQkTuTXnEC6Pws",
"emails" : [
{
"address" : "x@gmail.com"
},
{
"address" : "x2@gmail.com"
}
]
}
{
"emails" : [
{
"address" : "x@gmail.com"
}
]
}
或者,您可以使用聚合来获得预期的结果
db.users.aggregate({$match: {_id:'QYoHQkTuTXnEC6Pws'}},
{$project: {_id:0,email: {$arrayElemAt: ['$emails.address',0]}}})
回应
{“电子邮件”:x@gmail.com“}
我得到了你要求的答案
db.inventory.aggregate([{
$match: {
_id: "QYoHQkTuTXnEC6Pws"
}
}, {
$unwind: "$emails"
}, {
$replaceRoot: {
newRoot: "$emails"
}
}, {
$project: {
address: 1
}
}])
这将首先匹配正确的文档,然后将$展开电子邮件
字段以暴露内部对象,然后将根移动到它以使焦点靠近地址
字段,然后$项目
仅获取地址
,这将与示例数据一起产生(如果它包含多封电子邮件)