0

我的数据库中有一个名为 example 的集合,如下所示:

{
    "event" : "cheat",
    "message" : {
        "tableid" : 398,
        "time" : 1381853438870,
        "link" : "/dbcheat/table398/iID485"
    },
    "_id" : ObjectId("525d68fe99ddc6a019000008")
}

有数千条这样的记录,例如,我想查找前 50 条。

我研究过,最好的方法是使用 forEach() 函数。我习惯了 SQL,刚开始使用 Mongo 并了解 objectID 是唯一的,但我无法从中获得订单。

var cursor = db.example.find();
cursor.forEach(function(x){

    console.log(x.message);

});

但是由于某种原因,我收到了一个错误,因为 x 始终为空。

知道有什么问题吗?

4

3 回答 3

1

您必须在 find() 中为 function(error, cursor ) 和该游标中添加一个处理程序,假设 error 为 null 并且 cursor 存在,那么您执行 cursor.toArray( function( error, data ) )

在第一个中,您必须等待数据到来并期望出现错误。在第二个中,光标将变成一个可用的 jsons 数组:> 这是您所需要的。

db.example.find( function( error, cursor)
{
    if( error || !cursor)
    {
        console.log("error getting items");
    }
    else
    {
        cursor.toArray( function( error, items)
        {
            if( error || !items)
            {
                console.log("error getting items");
            }
            else
            {
                console.log( JSON.stringify( items ) );
            }
        });
    });
}
于 2013-10-17T14:33:23.867 回答
0

要查看“前 50 个”,您可能希望按时间对文档进行排序,并将查询结果最初限制为前 50 个。

db.coll.find().sort({"message.time":1}).limit(50)

然后,您可以在光标上使用 toArray() 方法并访问该数组中的文档。

于 2013-10-17T14:38:47.297 回答
0

要打印第一个 X 数字,您可以使用如下模式:

db.example.find().limit(x); 

其中 x 是指定x集合的​​第一个元素的整数

如果您想全部使用它们,请使用

db.example.find()

如果您想跳过第一个y元素并打印下一个元素,请x使用类似

db.example.skip(y).limit(x);

也有一些排序你可以使用时间字段。

于 2013-10-17T14:39:05.220 回答