arrays - 如何使用 Mongoose 从子文档数组中检索特定字段

标签 arrays mongodb mongoose subdocument

我正在尝试从子文档数组中获取特定字段

我不会在父文档中包含任何字段

这是示例文档

{
    "_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/

相关文章:

JavaScript array.includes 返回 false(比较来自链接数组的用户输入)

java - JSONObject 未正确更新

java - 计算整数数组元素的平方根时的 Arrays.asList 问题

perl - 如何将perl对象直接插入mongodb?

javascript - 根据值过滤器从数组中选择字段

node.js - Node Mongoose 更新两个集合

node.js - 在 Node 上安装 Mongoose

arrays - 在 MongoDB 的数组数据中查找数组

node.js - 通过 id 查找 mongoose 数组中的对象

python - mongoengine 调用导致 django View 被调用两次