Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MongoDB中选择一个数组_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 在MongoDB中选择一个数组

Javascript 在MongoDB中选择一个数组,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我尝试在页面上创建分页,因此我尝试选择包含数组项的“members”对象,以便进行排序、跳过和限制分页 这就是我所拥有的: { "_id": "4f609932615a935c18r000000", "members": [ { "user_name": "john1", "role": "user", "created_at": { "sec": 1331730738, "usec": 81

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

这就是我所拥有的:

{
"_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
        }
]
}
如何选择“成员”

我对这个很陌生,请帮忙
提前谢谢你

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

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

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


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

的参数。您可以使用$elemMatch:

试试这个:

  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);
    });
}

根据您提供的示例,文档似乎不是数组。您是否尝试过
docs.members.length
docs.members.etci使用“docs[0].members”访问数组是文档数组?什么是
console.log(“Found”+docs[0].members.length+“members”)说?我不认为你可以跳过并在mongo中使用数组。此外,您可能想考虑一个具有ID的成员返回到当前集合的单独集合。@如果我做控制台。PSL(“找到”+ DOCS [ 0 ]成员。长度+成员”);i get:find 5 members我可以使用$sort吗?不可以,但是由于聚合框架返回文档中数组中的所有结果,因此可以在输出结果数组之前对结果数组进行排序。解决方案的性能可能不如您在MongoDB中对成员进行排序时那样好,但如果我要更改模式,这是我能想到的唯一一个不更改“模式”的解决方案,您建议如何?只对会员使用单独的收藏?是的,就像我之前的建议一样。虽然这在很大程度上取决于您的问题域,但如果您经常(看起来)迭代成员,那么将成员放在单独的集合中是有意义的。因为这与问题完全无关,我建议您首先自己尝试,并在遇到任何问题时打开一个新问题。
db.collection.find({ members: { $elemMatch: { "user_name": "john1" } } });