Post.find()。populate(" name")的简单json响应将返回json结果,如下所示。注意:问题的重点是重新排列"名称":" Alex"在json到最终结构如图所示。忽略需要隐藏_id和__v的部分。感谢。
[
{
"_id": "54cd6669d3e0fb1b302e54e6",
"title": "Hello World",
"postedBy": {
"_id": "54cd6669d3e0fb1b302e54e4",
"name": "Alex",
"__v": 0
},
"__v": 0
},
...
]
我如何重新排列并显示整个json如下?
[
{
"_id": "54cd6669d3e0fb1b302e54e6",
"title": "Hello World",
"name": "Alex"
},
...
]
答案 0 :(得分:1)
您可以使用 lean()
方法返回纯JSON对象(不是mongoose文档),然后使用lodash辅助方法(例如 {{3})进行操作} ,如下例所示:
Post.find()
.populate("name")
.lean().exec(function (err, result) {
if(result){
var posts = _.map(result, function(p) {
p.name = p.postedBy.name;
p.postedBy = undefined;
return p;
});
console.log(posts);
}
});
您可以通过将"__v"
选项设置为false来禁用架构定义中的versionKey
属性。例如:
var postSchema = new Schema({ ... attributes ... }, { versionKey: false });
作为关于重新排列JSON中属性顺序的问题的后续内容,JS没有定义对象属性的顺序。但是,你
可以同时使用 map()
和 JSON.parse()
方法更改订单,例如
var json = {
"name": "Alex",
"title": "Hello World",
"_id": "54cd6669d3e0fb1b302e54e6"
};
console.log(json);
//change order to _id, title, name
var changed = JSON.parse(JSON.stringify(json, ["_id","title","name"] , 4));
console.log(k);
查看下面的演示。
var json = {
"name": "Alex",
"title": "Hello World",
"_id": "54cd6669d3e0fb1b302e54e6"
};
//change order to _id, title, name
var changed = JSON.parse(JSON.stringify(json, ["_id","title","name"] , 4));
pre.innerHTML = "original: " + JSON.stringify(json, null, 4) + "</br>Ordered: " + JSON.stringify(changed, null, 4);
<pre id="pre"></pre>