查找另一个ObjectId引用的嵌套文档

时间:2016-12-23 13:08:27

标签: node.js mongodb mongoose find mongoose-schema

我有四个不同的文档,它们具有相同的CId,这是另一个id,表示所有文档都是该ObjectId文档的子集。

{ "_id" : ObjectId("582c5211c8a8e06c0849a238"), "name" : "MyName", "code" : "1234", "__v" : 0 }

亚群

{ "_id" : ObjectId("584e72fc28a15d7c1ae0b3de"), "CId" : ObjectId("582c5211c8a8e06c0849a238"), "no_m" : 3, "create_date" : ISODate("2016-12-12T09:50:52.948Z"), "update_date" : ISODate("2016-12-19T14:22:28Z"), "__v" : 0}

{ "_id" : ObjectId("584e72fc28a15d7c1ae0b3df"), "CId" : ObjectId("582c5211c8a8e06c0849a238"), "no_m" : 3, "create_date" : ISODate("2016-12-12T09:50:52.948Z"), "update_date" : ISODate("2016-12-19T14:22:28Z"), "__v" : 0}

{ "_id" : ObjectId("584e72fc28a15d7c1ae0b3dg"), "CId" : ObjectId("582c5211c8a8e06c0849a238"), "no_m" : 3, "create_date" : ISODate("2016-12-12T09:50:52.948Z"), "update_date" : ISODate("2016-12-19T14:22:28Z"), "__v" : 0}

{ "_id" : ObjectId("584e72fc28a15d7c1ae0b3dh"), "CId" : ObjectId("582c5211c8a8e06c0849a238"), "no_m" : 3, "create_date" : ISODate("2016-12-12T09:50:52.948Z"), "update_date" : ISODate("2016-12-19T14:22:28Z"), "__v" : 0}

我想在Node.js

中找到使用monoose的所有文档

我的代码是

var c = 582c5211c8a8e06c0849a238
SubsetSchema.find({'CId' : cid},function(err,Docs){
     if (err)
     {   
         console.log(err);
         return res.status(400).send({"err":err});
     }
     });
     console.log(Docs);

但它给了我错误

如何在mongoose find()

中包含ObjectId

使用mongodb db.Docs.find({" CId":ObjectId(" 582c5211c8a8e06c0849a238")})正常工作

1 个答案:

答案 0 :(得分:2)

这里不需要强制转换或使用ObjectId构造函数,只需将其作为字符串传递,但也可能由于某些语法错误而导致错误,您需要调整代码如下:

var cid = '582c5211c8a8e06c0849a238';
SubsetSchema.find({'CId' : cid},function(err, Docs) {
  if (err)
  {   
     console.log(err);
     return res.status(400).send({"err":err});
  }
  console.log(Docs);
});

首先 :正确定义变量以匹配ccid的使用位置。

第二次 :用单引号/双引号将其指定为字符串。

第三次 :在回调函数中获取console.log语句,其中Docs已定义。