下面的代码在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});
有人可以帮我找到我做错的地方吗?
答案 0 :(得分:2)
问题在于find()
方法及其在犯罪中的同伴aggregate()
会返回Cursor
,只能使用一次var qry = db.CourseContent.find({ 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中,它会产生该文档但是使用一些驱动程序,你需要迭代光标。