我正在尝试从子文档数组中获取特定字段
我不会在父文档中包含任何字段
这是示例文档
{
"_id" : ObjectId("5409dd36b71997726532012d"),
"hierarchies" : [
{
"rank" : 1,
"_id" : ObjectId("5409df85b719977265320137"),
"name" : "CTO",
"userId" : [
ObjectId("53a47a639c52c9d83a2d71db")
]
}
]
}
如果 userId 在 userId 数组中,我想返回层次结构的排名
这是我目前的查询内容
collectionName.find({{hierarchies:
{$elemMatch : {userId: ObjectId("53a47a639c52c9d83a2d71db")}}}
, "hierarchies.$.rank", function(err,data){}
到目前为止,它返回了我想要的层次结构数组中的整个对象,但我想将其限制为对象的 rank 属性。
最佳答案
通常在 MongoDB 中可用于 .find()
查询的投影不会对数组的内部元素进行这种投影。您通常所能做的就是完全返回数组的“匹配”元素。
对于您想要的,您可以使用 aggregation framework相反,它可以让您更好地控制匹配和投影:
Model.aggregate([
{ "$match": {
"hierarchies.userId": ObjectId("53a47a639c52c9d83a2d71db")
}},
{ "$unwind": "$hierarchies" },
{ "$match": {
"hierarchies.userId": ObjectId("53a47a639c52c9d83a2d71db")
}},
{ "$project": {
"rank": "$hierarchies.rank"
}}
],function(err,result) {
})
基本上是匹配文档,过滤文档的数组内容到刚好匹配,然后只投影需要的字段。
关于arrays - 如何使用 Mongoose 从子文档数组中检索特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690475/