Javascript 如何使用mongoose在深度嵌套的数组上创建$slice

Javascript 如何使用mongoose在深度嵌套的数组上创建$slice,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在尝试分割一个嵌套很深的数组。以下面的结构为例。我需要对这个数组进行切片以进行分页 {messages: [{ message: { members: [ {example: object, blah: blah}, {example2: object2, blah2: blah2} ] }]} 在这种情况下,我将如何使用slice操作符 下面是我当前查询的一个示例 model.findOne({query: query}, { 'messages.0.message.members':

我正在尝试分割一个嵌套很深的数组。以下面的结构为例。我需要对这个数组进行切片以进行分页

{messages: [{ message: { members: [ {example: object, blah: blah}, {example2: object2, blah2: blah2} ] }]}
在这种情况下,我将如何使用slice操作符

下面是我当前查询的一个示例

model.findOne({query: query}, { 'messages.0.message.members': { '$slice': [ 0, 10 ] } })
然后我返回文档,但当我切片数组以仅返回数组的前10个成员时,成员长度仍然为14

这甚至可能是不可能的,但我希望在查询中包含该切片,以限制可能会减慢其速度的任何其他逻辑


在此方面的任何帮助都将不胜感激。谢谢

我不确定通过
.find()
执行该操作是否容易-我们知道它不起作用是因为嵌入式阵列,请尝试以下操作:

db.YourCollectionName.aggregate([{ $match: { "_id": ObjectId("5df94e17400289966e8707a7") } },
/** You can use $addFields if you want to retain remaining fields */
{ $project: { 'messages': { $arrayElemAt: ["$messages", 0] } } },
{ $project: { members: '$messages.message.members' } },
{ $project: { membersArr: { '$slice': ['$members', 0, 2] } } }])
结果:

/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "membersArr" : [ 
        {
            "example" : "object",
            "blah" : "blah"
        }, 
        {
            "example2" : "object2",
            "blah2" : "blah2"
        }
    ]
}
/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "object2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "object3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "object4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }, 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object11",
                        "blah" : "blah11"
                    }, 
                    {
                        "example2" : "object211",
                        "blah2" : "blah211"
                    }, 
                    {
                        "example2" : "object311",
                        "blah2" : "blah311"
                    }, 
                    {
                        "example2" : "object411",
                        "blah2" : "blah411"
                    }
                ]
            }
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df94e28400289966e870b34"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "objectF",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "objectF2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "objectF3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "objectF4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }
    ]
}
收集数据:

/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "membersArr" : [ 
        {
            "example" : "object",
            "blah" : "blah"
        }, 
        {
            "example2" : "object2",
            "blah2" : "blah2"
        }
    ]
}
/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "object2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "object3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "object4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }, 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object11",
                        "blah" : "blah11"
                    }, 
                    {
                        "example2" : "object211",
                        "blah2" : "blah211"
                    }, 
                    {
                        "example2" : "object311",
                        "blah2" : "blah311"
                    }, 
                    {
                        "example2" : "object411",
                        "blah2" : "blah411"
                    }
                ]
            }
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df94e28400289966e870b34"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "objectF",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "objectF2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "objectF3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "objectF4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }
    ]
}

Ref:

我不确定通过
.find()
-我们知道它不起作用是因为嵌入式阵列,请尝试以下方法:

db.YourCollectionName.aggregate([{ $match: { "_id": ObjectId("5df94e17400289966e8707a7") } },
/** You can use $addFields if you want to retain remaining fields */
{ $project: { 'messages': { $arrayElemAt: ["$messages", 0] } } },
{ $project: { members: '$messages.message.members' } },
{ $project: { membersArr: { '$slice': ['$members', 0, 2] } } }])
结果:

/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "membersArr" : [ 
        {
            "example" : "object",
            "blah" : "blah"
        }, 
        {
            "example2" : "object2",
            "blah2" : "blah2"
        }
    ]
}
/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "object2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "object3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "object4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }, 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object11",
                        "blah" : "blah11"
                    }, 
                    {
                        "example2" : "object211",
                        "blah2" : "blah211"
                    }, 
                    {
                        "example2" : "object311",
                        "blah2" : "blah311"
                    }, 
                    {
                        "example2" : "object411",
                        "blah2" : "blah411"
                    }
                ]
            }
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df94e28400289966e870b34"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "objectF",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "objectF2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "objectF3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "objectF4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }
    ]
}
收集数据:

/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "membersArr" : [ 
        {
            "example" : "object",
            "blah" : "blah"
        }, 
        {
            "example2" : "object2",
            "blah2" : "blah2"
        }
    ]
}
/* 1 */
{
    "_id" : ObjectId("5df94e17400289966e8707a7"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "object2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "object3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "object4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }, 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "object11",
                        "blah" : "blah11"
                    }, 
                    {
                        "example2" : "object211",
                        "blah2" : "blah211"
                    }, 
                    {
                        "example2" : "object311",
                        "blah2" : "blah311"
                    }, 
                    {
                        "example2" : "object411",
                        "blah2" : "blah411"
                    }
                ]
            }
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df94e28400289966e870b34"),
    "messages" : [ 
        {
            "message" : {
                "members" : [ 
                    {
                        "example" : "objectF",
                        "blah" : "blah"
                    }, 
                    {
                        "example2" : "objectF2",
                        "blah2" : "blah2"
                    }, 
                    {
                        "example2" : "objectF3",
                        "blah2" : "blah3"
                    }, 
                    {
                        "example2" : "objectF4",
                        "blah2" : "blah4"
                    }
                ]
            }
        }
    ]
}

参考:

这太棒了!谢谢你,斯里尼瓦西!这太棒了!谢谢你,斯里尼瓦西!