重新排列填充的json导致猫鼬

时间:2016-01-18 10:59:08

标签: mongodb mongoose

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"
        },
        ...
 ]

1 个答案:

答案 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>