如何在MongoDB中查询对象的值而不是键值对

时间:2017-01-10 11:00:36

标签: mongodb express

我在我的用户对象上存储了一个包含所有数据的数组

{
   _id: ObjectId(#############)
   fname: 'Bob',
   lname: 'Vargas',
   data: [
     // the data I want
   ]
}

我使用express来获取他的数据:

db.users.findOne( { _id: ObjectId(#############) }, { data: 1, _id: 0 } );

但是这给了我一个对象而不是数组:

{ data: [  /* my data */ ]}

我怎样才能获得数组?

更新

app.get('/user/:id/data', function (req, res, next) {
    db.users.findOne(
        { _id: mongojs.ObjectId(req.params.id) },
        { data: 1, _id: 0 },
        function (err, userData) {
            if (err) {
                res.send(err);
            }
            res.json(userData); 
        }
    );
});

2 个答案:

答案 0 :(得分:2)

向查询结果添加投影:

db.users.findOne( { _id: ObjectId(#############) }, {_id:0, data:1} )

使用0从结果中排除字段(默认情况下包含_id),并在结果中包含1字段。

MongoDB返回每个文档的对象。但您可以在客户端手动映射对象:

db.users.findOne( { _id: ObjectId(#############) }, {_id:0, data:1} )
        .map(function(d){ return d.data; }))

答案 1 :(得分:1)

MongoDB的findOne()只会返回一个对象,而不是一个数组;因此One。相反,您需要将其作为对象接收,然后获取值。

如果您是从mongo shell执行此操作,那么除非您想将数据移动到自己的集合中,否则无法解决问题。否则,您可以从应用程序中的对象获取数组。

更新:

在您的快速回复中,只对数据值进行编码,如此

res.json(userData.data);