在Mongoose中查找嵌入对象时未定义

时间:2016-10-07 02:57:17

标签: javascript angularjs node.js mongodb

我使用AngularJs,Node.js,MongoDB& Express和我想要做的是获取客户拥有的项目列表,计算它们并返回该计数。 代码是西班牙语,但它与英语几乎相同。

我的代码如下:

proyectosAsignadosAlCliente: function(idCliente,callback){
    dbConn.conectar(function(db){
        db.collection("proyectos")
        .find({"cliente._id":  new ObjectId(idCliente)}, function(err,cantidad){
            if(err) throw err;
            if(cantidad){
                callback(cantidad.toArray().length);
            }
            else{
                console.log("Entro al else de undefined");
                cantidad = 0;
                callback(cantidad);
            }
        });

我的主要问题是,我总是得到" undefined"

我真的认为我的问题在于:

.find({"cliente._id":  new ObjectId(idCliente)}

我没有任何Mongoose Schema,我也不知道" cliente._id"是我丢失的正确方法。在此先感谢你们,你们是最棒的!

如果我使用findOne,它会转到" else"并返回我cantidad = 0;但是因为我想要超过"一个"项目我使用find总是返回undefined但它没有通过" else"

更新

当我去DB时:

>use TP
>show collections
clientes
proyectos
>db.clientes.find()
{ "_id" : ObjectId("57f6a1be9a96ad239cb03ccc"), "nombre" : "cliente1", "correo" : "cliente1@correo.com" }
>db.proyectos.find()
{ "_id" : ObjectId("57f707d348e52c0e381bd4ca"), "nombre" : "123", "cliente" : { "_id" : "57f6a1be9a96ad239cb03ccc", "nombre" : "cliente1", "correo" : "cliente1@correo.com" }, "fechaInicio" : "1412-03-12T03:00:00.000Z", "presupuesto" : 2, "duracion" : 23123 }

我曾在mongodb的shell中尝试过:

> db.proyectos.find({'clientes._id': '57f6a1be9a96ad239cb03ccc'})

> db.proyectos.find({"clientes._id": ObjectId("57f6a1be9a96ad239cb03ccc") } )
如果我和" cliente"或" clientes"

1 个答案:

答案 0 :(得分:1)

请:

  • 确保您可以在mongo shell或您喜欢的编辑器中执行find
  • 确保您拥有以下一行:

    var ObjectId = require(' mongoose')。Types.ObjectId;

让这条线工作:

.find({"cliente._id":  new ObjectId(idCliente)}, function(err,cantidad){

当shell /编辑器中的find工作而你的代码中没有时,请从db

添加一个示例条目

修改 使用您的数据库项目后,我注意到您的embeded cliente文档包含一个_id字段,该字段不是ObjectId。它是一个存储为字符串的ObjectId。请使用以下查询。

.find({ "cliente._id" : "57f6a1be9a96ad239cb03ccc"})

我建议您确保存储的值是ObjectId类型,而不是存储为字符串的ObjectId。