现在我这样做
Client.findOne({_id: client_id}, function (err, client) {
if(err){ return next() }
var phone = client.phones.filter(function (phone) {
return phone._id === phone_id;
}).pop();
res.status(200).send(phone);
});
,但不确定这是否正确。我的架构就像这样
{
"_id" : ObjectId("560b05b6fd9d267f60b7bb28"),
"email" : "email@email.com",
"__v" : 1,
"phones" : [
{
"_id" : ObjectId("561a22cbe6ebf6d62965b4bc"),
"phone" : "1234"
}
]
}
所以我想通过560b05b6fd9d267f60b7bb28和561a22cbe6ebf6d62965b4bc获得电话1234
答案 0 :(得分:1)
子文档不能有_id
,至少没有相同的语义。文档的_id
始终已编入索引,并且必须是唯一的并且具有其他一些含义。您文档的_id
数组中的phones
字段是phone
的普通字段。
所以你可以通常的方式访问它。在shell术语中:
var doc = db.phones.findOne(
// query part
{
"_id": knownIdOfDocument,
"phones": $elemMatch:{"_id": knownIdOfSubdocument}
},
// projection
{ "phones.$":1 }
)
var phone = doc['phones'][0]; // Iirc, my JS is a bit rusty.