Mongo结果文档不存储为对象

时间:2016-08-26 19:01:44

标签: java node.js mongodb mongojs database

我尝试在执行查询后获取结果并将其存储在名为" model"的变量中。

db.collection.findOne({object},function(err,docs){
     model["output"]= docs;
})

以上代码将模型["输出"]存储为"未定义"。我如何掌握这个价值?

抱歉没有足够的代码。

所以有两个文件。

FILE1

dbStmtModel.insertRecords(collectionName, record).then(
function (results) {
    console.log("results",results);
    result = results;
 }, function (err){
      return err;
 });
  model[statement.output] = result;

FILE2

function insertRecords(operand1,operand2){

    var deferred = q.defer();
    db.collection(operand1).update(operand2,operand2,{upsert:true},function (err,docs) {
        if(err) {
            deferred.reject(err);
        }
        else {
            deferred.resolve(docs);
        }
    });
    return deferred.promise

}

尝试使用承诺,尝试使用 async 。仍然似乎没有得到模型存储查询结果的输出。此外,没有错误,因为回调正确返回并打印结果。虽然控制台语句似乎正确地打印了结果,但我不确定我是否正确使用了promises。此外,我使用 mongojs 而不是 mongoos e而不是mongodb(因为这里的架构是动态的),不知道那会改变什么。

3 个答案:

答案 0 :(得分:0)

首先,检查你忽略的错误参数

没有足够的代码可以肯定,但我猜你之前在model调用findOne的同一范围内定义了model['output'],而在下面尝试使用findOne }。

这不起作用,因为mongodb(几乎每个model['output']驱动程序方法)都是异步,所以在尝试使用之前不可能调用它的回调{{1}}。

对于您的问题没有快速解决方案,您需要了解异步性。结帐this回答。

答案 1 :(得分:0)

db.collection.findOne({object},function(err,docs){
  model["output"]= docs;
})

首先 - 生病假设您的“模型”对象已定义。 (它会抛出该模型未定义,而不是模型输出) 其次,你没有检查错误,如果有错误文档最终为空。 如果你还有未定义的话。模型对象也可能出错。例如 - 检查它是否是一个对象。

db.collection.findOne({object}, (err, docs) => {
   if(err) {
      return console.log(err)
   }
   model.output = docs;
}

另外!我只是猜测,但也许你正试图用.findOne范围?我的意思是 - 它是异步调用。所以,如果你做这样的事情

db.collection.findOne({object}, (err, docs) => {
   if(err) {
      return console.log(err)
   }
   model.output = docs;
}
console.log(model.output);

然后你的model.output是未定义的,因为你在数据库返回数据之前调用它 - 它不会等待。你必须使用回调(或承诺)。

callDB (object, cb) => {
   db.collection.findOne(object, (err, docs) => {
     if(err) {
        return (err)
      }
      return (null, docs);

    }
}

然后你可以称之为

callDB({object}, (err, result) => {
   model.result = result;
});

但请注意,您对函数的新调用仍然是异步的。所以你的model.result只能在其范围内工作。

//我看到你已经更新了你的问题,但我会把它留在这里。

答案 2 :(得分:-1)

首先要确保你的结果是

console.log("RESULT",docs) if you getting your results then try below methods 

作为mongo查询返回doc,它是一个无法修改的模型架构。 尝试使用lean返回文档JSON对象

var model={};
db.collection.findOne({object},function(err,docs){
     model.output= docs;
}).lean(true);

var result={}
db.collection.findOne({object},function(err,docs){
result.model.output = docs;
})