我正在使用NodeJs和MongoDb作为后端服务。我的收藏集中有几个文档,其字段名为_id和Name。
我想在Json对象中获得如下所示的输出:
[
{
Name:"Paul"
},
{
Name:"Jon"
}
]
这是我的代码:
var express = require('express');
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
app.post('/offers',(req, res) => {
MongoClient.connect(url, (err, db) => {
if(err) throw err;
var dbo = db.db('Tiffino_db');
dbo.collection("Offers")
.find({},{ projection: { _id: 0 } })
.toArray((err, result) => {
if (err) {
console.log("Error:", +err);
}
else {
output = result.map(r => r.Name);
res.json({"Name":output});
db.close();
}
});
});
});
这是我的输出:
{
"Name": [
"Paul",
"Jon",
"David",
"Aina"
]
}
请让我知道如何修改代码以获得所需的输出。
谢谢
答案 0 :(得分:2)
代替:
output = result.map(r => r.Name); res.json({"Name":output});
尝试:
output = result.map( r => ({ "Name": r.Name })); res.json( output );
按照说明,您将所有结果记录映射到一个数组中,然后将该数组分配给属性名称。相反,您希望每次使用属性名称创建一个新对象并返回该数组。
答案 1 :(得分:2)
代替此
Provides: template
使用此代码
res.json({"Name":output})
答案 2 :(得分:0)
我测试了您提供的代码。使用集合结构和查询,如果您删除行output = result.map(r => r.Name);
并仅返回result
,您将得到以下结构:
[{ "Name": "TestName" },
{ "Name": "TestNam2" }]
然后else
块中的代码如下:
res.json(result);
db.close();