0
{
"_id": "4f609932615a935c18r000000",
"members": [
    {
        "user_name": "john1",
        "role": "user",
        "created_at": {
            "sec": 1331730738,
            "usec": 810000
        },
{
        "user_name": "john2",
        "role": "user",
        "created_at": {
            "sec": 1331730738,
            "usec": 810000
        },
{
        "user_name": "john3",
        "role": "user",
        "created_at": {
            "sec": 1331730738,
            "usec": 810000
        },
{
        "user_name": "john4",
        "role": "user",
        "created_at": {
            "sec": 1331730738,
            "usec": 810000
        },
    {
        "user_name": "markus",
        "role": "user",
        "created_at": {
            "sec": 1331730738,
            "usec": 810000
        }
]
}

我正在尝试在页面上创建分页,因此我正在尝试选择包含数组项的“成员”对象,以便我可以进行排序、跳过、限制到分页。

这就是我所拥有的:

  var cursor = db.collection("members").find();
    cursor.toArray(function(err, docs) {
         "use strict";

        if (err) return callback(err, null);

        console.log("Found " + docs[0].members.length + " members");
        console.log(docs[0].members);
        callback(err, docs[0].members);
    });
}

如何选择“成员”?

我对此很陌生,请帮助提前谢谢!

4

2 回答 2

0

您可以使用聚合框架展开成员数组,然后跳过并限制您的结果。我刚刚验证它适用于$unwind返回的文档流。

对于您的分页代码,命令如下所示

db.members.aggregate([{$unwind : "$members"},{$skip : 1},{$limit: 2}])

您现在需要做的就是自定义参数$skip$limit

于 2013-09-06T22:06:55.977 回答
0

您可以使用 $elemMatch:

http://docs.mongodb.org/manual/reference/operator/elemMatch/

尝试这个:

db.collection.find({ members: { $elemMatch: { "user_name": "john1" } } });
于 2013-09-06T22:54:50.583 回答