Mongodb游标返回null

时间:2013-10-17 14:10:34

标签: mongodb

我的数据库中有一个名为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总是空的。

知道可能出现什么问题吗?

3 个答案:

答案 0 :(得分:1)

你必须在find()for function(错误,游标)和该游标中添加一个处理程序,假设错误为null且游标存在,那么你就做了cursor.toArray(函数(错误,数据))

在第一个中,您必须等待数据到来并期待错误。 在第二个中,光标将变为可用的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 ) );
            }
        });
    });
}

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

要打印第一个X编号,您可以使用以下模式:

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

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

如果你想让它们全部使用

db.example.find()

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

的内容
db.example.skip(y).limit(x);

还要进行一些排序,你可以使用时间字段。