Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB shell:打印结果_Mongodb - Fatal编程技术网

MongoDB shell:打印结果

MongoDB shell:打印结果,mongodb,Mongodb,如果我只在Robo3T中执行以下短脚本的第一部分,我会将结果打印到屏幕上。 如果我用第二部分执行它,我只会得到标准答案“脚本执行成功,但没有结果显示” 如何打印第二部分预期的中间结果? 我认为特许权和使命都是类似的JSON对象。 我花了几个小时回答这个简单的问题。请帮忙 var mission = db.mission.find({"googleCalendarEventId":"QiVJdbL"}); while (mission.hasNext()) { var record

如果我只在Robo3T中执行以下短脚本的第一部分,我会将结果打印到屏幕上。 如果我用第二部分执行它,我只会得到标准答案“脚本执行成功,但没有结果显示”

如何打印第二部分预期的中间结果?

我认为特许权和使命都是类似的JSON对象。 我花了几个小时回答这个简单的问题。请帮忙

   var mission = db.mission.find({"googleCalendarEventId":"QiVJdbL"});
while (mission.hasNext()) {
    var record = mission.next();   
    print(record.googleCalendarEventId + "," + record.concessionIdSet[0])
};

// 2nd part //

var concession = db.cursor.findOne({"_id": ObjectId(mission.concessionIdSet[0])});
while (concession.hasNext()) {
    var record = concession.next();   
    print(record)
};

再次感谢@stennie,对于其他有同样问题的人,这里有一条代码对我有效,我犯了两个错误: 1/查找(->光标)和查找完成(->1个元素)之间的差异 2/循环中的操作必须嵌套在循环中-->我使用了一个函数,它可以工作:

const missions = db.mission.find({
   $and:[{"concessionToInvoice": {$exists: false}},
   {"concessionIdSet":{$size:1}}]
}); 
  missions.forEach((mission) => {
   const concession = getConcession(mission);
   print(mission.googleCalendarEventId+"- invoice to :"+concession.name);
   mission.concessionToInvoice = getConcessionToInvoice(concession); //another function
   db.mission.save(mission);
});

function getConcession(mission){
       const concession = db.concession.findOne({"_id": ObjectId(mission.concessionIdSet[0])});
       return concession;
}

我的一个朋友回答说find()返回一个游标,findOne返回一个文档,这意味着我可以打印第二个文档,而不需要第二部分中的“while”。。。实际上这还不够:仅仅添加第二部分就可以阻止打印结果。我不明白为什么!!var cursor=db.mission.find({“EventId”:“QiVJdbL”})而(cursor.hasNext()){var r=cursor.next();print(r.EventId+”,“+r.consessionidset[0]);//单独->打印结果var=db.cursor.findOne({“\u id”:ObjectId(mission.concessionIdSet[0]);将
mission
的值设置为
find()
返回的游标对象,然后通过
mission.next()
在第一个循环中迭代所有结果。如果要打印与第一个查询匹配的每个
任务
文档的值,则第二个循环应该嵌套在第一个循环中。我很惊讶,当您尝试引用
mission.concessionIdSet[0]
或迭代
findOne()
(返回文档而不是光标)时没有出现错误,但Robo3T可能会抑制错误。我建议您首先在
mongo
shell中运行脚本。有关更多示例,请参阅:在MongoDB文档中。@Stennie,谢谢!事实上,仅仅添加第二部分块来显示第一部分的结果,在完整的脚本中,我没有得到我正在寻找的DB的修改。什么是“mongo shell”?我原以为它会是Robo3T外壳…当您在本地下载或安装MongoDB时,
mongo
shell就包含在内了:。如果您使用的是像MongoDB Atlas这样的托管服务,那么也只能下载shell二进制文件。Robo3T是一个第三方应用程序,它嵌入了较旧版本的
mongo
shell(目前是Robo3T 1.2的3.4 shell,这是截至2018年6月的最新版本)。这是MongoDB背后的两个主要版本,如果您使用的是MongoDB 3.4以外的任何服务器版本,则可能会出现问题。