I want to get chat histories on mongodb.So I need use logical query in mongodb.
I have a message object.And Message have to,sender and message.
For example; in mongodb:
-->to: A sender: B message: blabla
-->to: B sender: A message: blahblah
-->to: C sender: A message: haha
I need only speech between A and B limit last 20.How can I do that in node.js?
My code:
function getLastMessageFor(to,sender){
MongoClient.connect('mongodb://127.0.0.1:27017/mydb', function(err, db) {
if (err)
throw err;
console.log("Connected to Database");
db.collection('test').find($or :[ $and[{"to":to},{"sender":sender}], $and[{"to":sender},{"sender":to}]]).limit(..){})
});
}
To me, ı need {(to = toName AND sender = senderName) OR (to = senderName AND sender = toName)}.last(20)
the logic of this. But how can I do that in mongodb into nodejs.
I need speech between A and B last 20.
It seems you're very close, just clean it up a bit to be:
db.collection('test').find({$or: [
{"to": to, "sender": sender},
{"to": sender, "sender": to}
]}).limit(20).toArray(function(err, messages) {
console.log(messages);
});
There's an implicit $and
among fields in the same query object.