1
나는 내 질문에 대한 적절한 대답을 찾을 수없는 것 같아, 나는 stackoverflow 온통 보였다. nodejs + mongobd로 포트하려고하는 C#의 샘플 코드를 생각해보십시오.노드를 사용하여 mongodb의 다중 쿼리
var messageList = new List<MessageHelper>();
foreach(MessageActivation messageToAsk in messagesToAsk)
{
var message = from m in dbContext.Messages where m.Id == messageToAsk.MessageId select m;
var jokeMessage = from m in dbContext.Messages where m.Id == messageToAsk.JokeMessageId select m;
var user = from u in dbContext.Users where u.Id == messageToAsk.SourceUserId select u;
var messageHelper = new MessageHelper();
messageHelper.AskingUserId = user.ToList()[0].Id;
messageHelper.Message = message.ToList()[0];
messageList.Add(messageHelper);
}
return messageList;
노드의 방식으로이를 수행하는 가장 좋은 방법은 무엇입니까? 단지 사이드 노드 인 dbContext는 DB를 쿼리합니다. 요점은 필요한 모든 정보를 수집하고 패키지화 한 다음 전송하는 것입니다.
감사
편집 :
이 내가 나는 변화를 만드는 다른 어떤 사람을 위해 여기에 게시
// collect needed info to make next queries in db
var messageIdList = new Array();
var jokeMessageIdList = new Array();
var sourceUserIdList = new Array();
for(var i=0; i < messagesToAsk.length; i++)
{
messageIdList.push(messagesToAsk[i].MessageId );
jokeMessageIdList.push(jokeMessageId[i].JokeMessageId );
sourceUserIdList .push(jokeMessageId[i].SourceUserId );
}
// make requests to have all the data in place
var messages = App.DataModels.Messages.find({});
messages.where('MessageId').in(messageIdList);
messages.exec(function (err, foundMessages)
{
var jokeMessages = App.DataModels.Messages.find({});
jokeMessages.where('JokeMessageId').in(jokeMessageIdList);
jokeMessages.exec(function (err, foundJokeMessages)
{
var users = App.DataModels.Messages.find({});
users.where('SourceUserId').in(sourceUserIdList);
users.exec(function (err, foundUsers)
{
var messageList = new Array(); // new List<MessageHelper>();
for(var i=0; i < messagesToAsk.length; i++)
{
var message = null;
var jokeMessage = null;
var user = null;
// get the data
for(var j = 0; j < messages.length; j++)
{
if(messages[j].MessageId === messagesToAsk[i].MessageId)
{
message = messages[j];
break;
}
}
for(var k = 0; k < jokeMessages.length; k++)
{
if(jokeMessages[k].JokeMessageId === messagesToAsk[k].JokeMessageId)
{
jokeMessage = jokeMessage[k];
break;
}
}
for(var l = 0; l < users.length; l++)
{
if (users[l].SourceUserId === messagesToAsk[l].SourceUserId)
{
user = users[l];
break;
}
}
var messageHelper =
{
"AskingUserId" : user.Id,
"AskingUserPic" : user.HelperPhoto,
"Message" : message,
"JokeMessage" : message.Type === "1" ? jokeMessage.Content
};
messageList.Add(messageHelper);
}
responseDelegate(response, messageList);
});
});
});
을 시도하는 것이다. 아이디어는 반복하기 전에 최종 결과를 반복하고 조합하기 전에 모든 데이터를 수집하고 필터링해야 할 필요가있는 것으로 보입니다.
이것은 코드 변환 사이트가 아닙니다. :) Node에서 무엇을 시도 했습니까? 그것들은 모두 당신의 디자인의 일부로서 Node의 비동기 성질을 다룰 필요가 있다는 것을 제외하고는 모두 똑바로 보입니다. 먼저 [here] (http://mongodb.github.com/node-mongodb-native/api-articles/nodekoarticle1.html)를 읽으십시오. – WiredPrairie
NodeJS의 비동기 특성을 고려하면 좋아하는 약속/지연 라이브러리/패턴을 찾아 모든 값이 반환 될 때 최적으로 쿼리하고 계속할 수 있습니다. – WiredPrairie
@WiredPrairie - 그걸 들여다 볼께 감사합니다. 그물에서 이걸 보았으나, 새로운 의존성을 추가하여 바퀴를 발명하고 싶지 않았습니다. 콜백 등에서 콜백 내에서 콜백을하지 않고 표준 방법을 찾고있었습니다. 더 복잡한 프로젝트에서는 매우 빨리 못 생길 수 있습니다. –