首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NodeJS + MongoDB:使用findOne ()从集合中获取数据

NodeJS + MongoDB:使用findOne ()从集合中获取数据
EN

Stack Overflow用户
提问于 2012-06-07 17:48:34
回答 4查看 34.8K关注 0票数 16

我有一个"companies“集合,里面有几个对象。每个对象都有"_id“参数。我正在尝试从db获取此参数:

代码语言:javascript
复制
app.get('/companies/:id',function(req,res){
db.collection("companies",function(err,collection){
    console.log(req.params.id);
    collection.findOne({_id: req.params.id},function(err, doc) {
        if (doc){
            console.log(doc._id);
        } else {
            console.log('no data for this company');
        }
    });
});
});

因此,我请求companies/4fcfd7f246e1464d05000001 (4fcfd7f246e1464d05000001 is _id-我需要的对象的参数),findOne不返回任何“为什么console.log('no data for this company');”执行。

我绝对确定我有一个_id=为“4fcfd7f246e1464d05000001”的对象。我哪里做错了?谢谢!

然而,我刚刚注意到id不是一个典型的字符串字段。这就是mViewer所展示的:

代码语言:javascript
复制
"_id": {
        "$oid": "4fcfd7f246e1464d05000001"
    },

看起来有点奇怪。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-07 18:06:27

您需要构造ObjectID,而不是将其作为字符串传递。像这样的东西应该是有效的:

代码语言:javascript
复制
var BSON = require('mongodb').BSONPure;
var obj_id = BSON.ObjectID.createFromHexString("4fcfd7f246e1464d05000001");

然后,尝试在find/findOne中使用它。

编辑:正如Ohad在评论中指出的(感谢Ohad!),你也可以使用:

代码语言:javascript
复制
new require('mongodb').ObjectID(req.params.id)

而不是上面概述的createFromHexString

票数 20
EN

Stack Overflow用户

发布于 2012-06-07 18:25:06

这是因为mongo中的_id字段不是string类型(与您的req.params.id相同)。正如在其他答案中所建议的,您应该显式地转换它。

试试mongoskin,你可以像node-mongodb-native驱动程序一样使用它,但要加点糖。例如:

代码语言:javascript
复制
// connect easier
var db = require('mongoskin').mongo.db('localhost:27017/testdb?auto_reconnect');

// collections
var companies = db.collection('companies');

// create object IDs
var oid = db.companies.id(req.params.id);

// some nice functions…
companies.findById();

//… and bindings
db.bind('companies', {
  top10: function(callback) {
    this.find({}, {limit: 10, sort: [['rating', -1]]).toArray(callback);
  } 
});

db.companies.top10(printTop10);
票数 3
EN

Stack Overflow用户

发布于 2013-09-03 19:01:32

您可以使用findById(),它将为您处理id转换。

代码语言:javascript
复制
company = Company.findById(req.params.id, function(err, company) {
    //////////
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10929443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档