我在我的用户对象上存储了一个包含所有数据的数组
{
_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);
}
);
});
答案 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);