无法将查询结果映射到变量

时间:2016-08-17 11:47:02

标签: mongodb mongodb-query

下面的代码在mongo shell中被多次使用。

db.CourseContent.find({Actor: a, Object: obj})

因此,我已将查询结果推送到变量中以供进一步使用。但是,似乎正在更改或修改查询,无法进一步使用。

旧代码:(这是工作很精细)

var bag={}
bag.$sri=[]; bag.$idz=[]
bag.$sri =db.CourseContent.find({Actor: a, Object: obj}).map( function(sri) {return sri.StatementRefId});
bag.$idz =db.CourseContent.find({Actor: a, Object: obj}).map( function(sri) {return sri._id});

新代码:(在使用VARIABLE存储查询结果时不工作)包。$ idz不包含任何在旧代码中成功的值。

var bag={}
bag.$sri=[]; bag.$idz=[]
var qry = db.CourseContent.find({Actor: a, Object: obj})
bag.$sri =qry.map( function(sri) {return sri.StatementRefId});
bag.$idz = qry.map( function(sri) {return sri._id});

有人可以帮我找到我做错的地方吗?

1 个答案:

答案 0 :(得分:2)

问题在于find()方法及其在犯罪中的同伴aggregate()会返回Cursor,只能使用一次var qry = db.CourseContent.fin‌​d({ Actor: a, Object: obj }).toArray() 。因此,您需要使用toArray()方法转换查询结果,如下所示:

db.CourseContent.aggregate([ 
    { "$match": { Actor: a, Object: obj } },
    { "group": { 
        "_id": null, 
        "sri": { "$push": "$StatementRefId" }, 
        "idz": { "$push": "$_id" }
    }}
])

我建议你使用聚合框架来返回这些值:

Cursor

生成的CountDownTimer对象包含单个文档。如果你在shell中,它会产生该文档但是使用一些驱动程序,你需要迭代光标。