我使用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"
答案 0 :(得分:1)
请:
确保您拥有以下一行:
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。