首页 文章

具有嵌套查询的Mongoose和mongoDB

提问于
浏览
0

我正在将我在mongoDB中执行的查询传递给mongoose并且它给了我错误 .

mongo DB中的查询是:

db.facturas.find({
    _id: { 
        $in: db.detalles.distinct("id_factura", { 
            category: ObjectId("5889eae21ffcc6da2c6b4ae4")
        })
    }
})

在APP中,我构建了这样的查询:

Factura.find({'_id': { "$in" : Detalle.distinct("id_factura",{qrycat}) } })
        .populate('pto_venta')
        .populate('forma_pago')
        .exec(function(err, result) {
          if (err) res.send(err);
          res.json(result); 
        });

我在NODEJS中收到以下错误:

/var/nodejs/aadides-sgi/node_modules/express/lib/response.js:242 var body = JSON.stringify(val,replacer,spaces); ^ TypeError:在ServerResponse.send上的ServerResponse.json(/var/nodejs/aadides-sgi/node_modules/express/lib/response.js:242:19)将Object结构转换为JSON at Object.stringify(native)(/ var /nodejs/aadides-sgi/node_modules/express/lib/response.js:151:21)/var/nodeides-sgi/app/handlers/facturasHandler.js:494:22 at / var / nodejs / aadides- sgi / node_modules / mongoose / lib / query.js:2176:21在/./find(/ var / nodejs / aadides-sgi / / var / node /sad / sd / node_modules / mongoose / lib / query.js:1019:5)在/var/nodejs/aadides-sgi/node_modules/kareem/index.js:156:8 at / var / nodejs / aadides-sgi / node_modules / kareem / index .js:18:7在_combinedTickCallback(internal / process / next_tick.js:73:7)at process._tickCallback(internal / process / next_tick.js:104:9)events.js:160 throw er; //未处理的'错误'事件^错误:在Pipe.onread(net.js:568:26)的exports._errnoException(util.js:1018:11)处读取ECONNRESET

1 回答

  • 0

    仔细检查distinct()的第二个参数,因为 {qrycat} 看起来不像有效对象 .

    更重要的是, distinct() 是异步的(就像大多数mongoose操作一样),因此在调用下一个操作之前需要有一个回调来获取ID .

    Detalle.distinct("id_factura", {qrycat}, function (err, id_facturas) {
        if (err) 
            return res.send(err);
        // id_facturas should be an array
        Factura.find({'_id': { $in: id_facturas }})
            .populate('pto_venta forma_pago') // Mongoose >= 3.6
            .exec(function(err, result) {
                if (err) 
                    return res.send(err); // don't forget the return
                res.json(result); 
            });
    });
    

相关问题