【发布时间】:2017-03-01 01:48:56
【问题描述】:
好的,我的这段代码在 for 循环中包含一个嵌套查询
var query = records.find({$or:[{starter:data},{receiver:data}]},{});//check the records table for all persons the logged in user has spoken to
query.sort('-createDate').exec(function (err, docs){
if(err) throw err;
for(var i=docs.length-1; i>= 0; i--)
{
var starter = docs[i].starter;
var receiver = docs[i].receiver;
var lasttxt = docs[i].lastMessage;
if (starter == socket.usernames){
var target = receiver;
}else
{
var target = starter;
}
usersrec.find({username:target},{}).lean().exec(function (errx, docx){
if(errx) throw errx;
docx[0].message = lasttxt;
socket.emit('usernames', docx);
});
}
})
它的意思是获取当前登录用户与之交谈的每个人的最后一条消息,并将其存储在lasttxt 变量中。
问题是它只获取数据库中最后一个用户的最后一条消息
然后它将最后一条消息分配给每个人作为他们自己的最后一条消息。
这不会影响数据库的记录。只是客户端 我错过了什么?
【问题讨论】:
-
如果我在
usersrec.find查询之前执行console.log(lasttxt),它会返回正确的结果。但是当我将lasttxt变量放在查询中时,它只会得到数据库中该字段的最后一次出现 -
好的,@chridam 我现在去那里
-
@chridam async 是
female dog。我通过在客户端和服务器之间发送所需的数据来玩弄套接字。瞧!它奏效了 -
很高兴您对此进行了排序。您可以在此处发布您的解决方案,以帮助可能遇到同样困境的其他人。
标签: javascript arrays mongodb mongoose socket.io