Mongodb 什么是通过 ID 检索子文档的最佳方法,如果我知道父 ID 和子 ID
Mondodb what is the best way to retrieve a subdocument by Id, If I know parent id and sub id
现在我是这样做的
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
得到 phone 1234
子文档不能有 _id
,至少不能有相同的语义。文档的 _id
总是 索引并且必须是唯一的并且有一些其他含义。您文档的 phones
数组中的 _id
字段是 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.
现在我是这样做的
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
得到 phone 1234子文档不能有 _id
,至少不能有相同的语义。文档的 _id
总是 索引并且必须是唯一的并且有一些其他含义。您文档的 phones
数组中的 _id
字段是 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.