如何迭代以下数据光标? 以下代码给出了错误"
TypeError:对象[object Object]没有方法' forEach'
var data = db.profiles.runCommand("aggregate", {
pipeline: [
{$limit: 100000},
{$unwind: "$Items"},
{ $group: {
_id: "$Items", count: {$sum: 1}
},
},
],
allowDiskUse: true,
cursor: { batchSize: 100 }
});
data.forEach(printjson) // gives error
数据变量包含以下内容
MongoDB shell version: 2.6.5
connecting to: myCollection
{
"cursor" : {
"id" : NumberLong("61248019114"),
"ns" : "myCollection.profiles",
"firstBatch" : [
{
"_id" : "alex",
"count" : 1
},
{
"_id" : "james",
"count" : 1
} .......
},
"ok" : 1
}
答案 0 :(得分:3)
编辑:
来自MongoDB RunCommand Docs:
使用aggregate命令返回游标是一种低级操作,适用于驱动程序的作者。大多数用户应该使用mongo shell或其驱动程序中提供的db.collection.aggregate()帮助程序。在2.6及更高版本中,aggregate()帮助程序始终返回游标。
您需要发送OP_GET_MORE消息来迭代光标。
而是使用aggregate() helper。
var data= db.profiles.aggregate([
{$limit: 100000},
{$unwind: "$Items"},
{ $group: {
_id: "$Items", count: {$sum: 1}
},
},
],
{
allowDiskUse: true,
cursor: { batchSize: 100}
}
)
这会返回一个光标。您可以使用forEach
方法进行迭代。
data.forEach(printjson)