我尝试在执行查询后获取结果并将其存储在名为" 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(因为这里的架构是动态的),不知道那会改变什么。
答案 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;
})