Sql就像在数组上查询一样,检查二级数组中是否存在值

时间:2016-01-24 02:53:08

标签: arrays node.js mongodb mongoose

我对MEAN堆栈/节点相对较新,我试图做一个我在.Net / RDBMS世界中很容易找到的操作:

SELECT * FROM Collection1 WHERE Id IN 
(SELECT Collection1Id FROM Collection2 WHERE SomeValue > @Something 
AND SomeOtherValue <@Something)

现在在Mongo中,我无法访问加入,并且对象自然不同,嵌入也没有意义。所以到目前为止我所拥有的是:

Collection1.find({ ..filtering criteria here ...}, function(err, collection1s){

var idsFromCollection1 =[];

//forEach is bad because it's blocking?
collection1s.forEach(function(item){
   idsFromCollection1.push(item.doc._id);
});

//nested callbacks are not ideal but unsure what else to do?
Collection2.find({ "collection1Id" : { $in: idsFromCollection1 },
 { SomeValue : { $gt: something }}, 
 { SomeOtherValue  { $lt: something }} }, 
 function(err, collection2s){

      //do some sort of filter on collection1s where id must be in collection2s 

 });


 });

这似乎是一种不正确的方法,因为多次回调,阻塞foreach以及我不知道如何在两个数组上执行类似连接的sql而不通过collection1循环并执行collection2.contains这一事实()对于每个元素......这似乎是缓慢而可怕的。

所以我的问题是1)什么是更好的方法? 2)如果这个方法在问题上是正确的,我怎样才能在内存中的两个数组上进行有效的类似sql的连接?

0 个答案:

没有答案