用mongodb中的数据填充字符串

时间:2020-03-11 08:28:07

标签: node.js mongodb

我是nodejs和mongodb的新手。有人可以向我解释以下代码的行为吗?

var express = require('express')
var app = express();
var MongoClient = require('mongodb').MongoClient
const assert = require('assert')
const mongourl = 'mongodb://localhost:27017/test'
var str=""

MongoClient.connect(mongourl, function(err, client){
    assert.equal(null, err);
    var db = client.db('test');
    var cursor = db.collection('projects.testproject.exampleChannel.germany.parameter').find();
    cursor.forEach(function(item){
      if(item!=null){
        str=str+JSON.stringify(item)
        console.log("1 "+str)
      }
    })
    client.close();
    console.log("2 "+str)
  })

我得到以下输出,但不明白,为什么输出1是我期望的,而输出2为空。

2
1 {“ _id”:“ 5e67960fd92ba91300f5d718”,“ basicInfo”:{“ projectName”:“ exampleProject”,“ salesChannel”:“ exampleChannel”,“ country”:“德国”},“类别”:{“ pieceItems”:{ “ amount”:0},“ weightItems”:{“ amount”:0},“ lengthItems”:{“ amount”:0},“ volumeItems”:{“ amount”:0},“ weightCodedItems”:{“ amount “:0},” lengthCodedItems“:{”数量“:0},” volumeCodedItems“:{”数量“:0},” priceCodedItems“:{”数量“:0},” deposit&containerItems“:{”数量“: 0},“ ageRestrictedItems”:{“金额”:0},“ prepaidItems”:{“金额”:0},“ e-loadingItems”:{“金额”:0},“ guranteeItems”:{“金额”: 0},“ paperReadingItems”:{“ amount”:0},“ technicalItems”:{“ amount”:0},“ giftItems”:{“ amount”:0},“ commonCustomerCardItems”:{“ amount”:0} ,“ payBackCardItems”:{“ amount”:0},“ deutschlandCardItems”:{“ amount”:0},“ serviceItems”:{“ amount”:0}}}

1 个答案:

答案 0 :(得分:1)

forEach具有回调函数,您无需等待循环完成。尝试这样的事情

const express = require("express");
const app = express();
const MongoClient = require("mongodb").MongoClient;
const assert = require("assert");
const mongourl = "mongodb://localhost:27017/test";
let str = "";

MongoClient.connect(mongourl, async function (err, client) {
  assert.equal(null, err);
  const db = client.db("test");
  const cursor = db.collection("projects.testproject.exampleChannel.germany.parameter").find();
  while (await cursor.hasNext()) {
    const item = await cursor.next();
    if (item != null) {
      str += JSON.stringify(item);
      console.log(`1 ${str}`);
    }
  }
  client.close();
  console.log(`2 ${str}`);
});