Mongoose中保存/加载json对象之间的区别

时间:2013-08-31 19:47:45

标签: javascript json node.js mongodb mongoose

我在mongodb(Mongoose)中保存json对象时遇到问题,所以当我进行插入时一切正常,但是当我发出相同对象的请求时,Mongoose返回一个修改过的json。它就像Mongoose自动完成推特领域,我不知道为什么。

这是我的代码:

UserSchema = mongoose.Schema({
firstName:  String,
lastName:   String,
email:      String,
salt:       String,
hash:       String,
twitter:{
    id:       String,
    email:    String,
    name:     String
},
facebook:{
    id:       String,
    email:    String,
    name:     String,
    username: String,
    photo:    String,
    gender:   String
}
});

我将json保存在我的数据库中:

User.create({
        email : profile.emails[0].value,
        facebook : {
            id:    profile.id,
            email: profile.emails[0].value,
            name:  profile.displayName,
            username: profile.username,
            photo: profile.photos[0].value,
            gender: profile.gender
            }
        }, function(err, user){
            if(err) throw err;
            // if (err) return done(err);
            done(null, user);
        });

但是,当我的猫鼬返回一个json时。

enter image description here

Mongoose在json中生成了一个字段。 twitter:{}< ----

我不知道为什么,有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:1)

如果查看保存到MongoDB的文档,除非设置了子对象的属性,否则您将看到twitter对象实际上不存在。创建对象,以便您可以方便地设置属性,而无需担心创建子/嵌套对象。所以你可以这样做:

var user = new User();
user.twitter.id = 'wiredprairie';
user.save();

结果:

{ "_id" : ObjectId("522259394eb9ed0c30000002"), 
  "twitter" : { "id" : "wiredprairie" }, "__v" : 0 }

如果你更进一步想要一个更“纯粹”的数据视图,你可以在Mongoose模型实例上使用toJSON

console.log(user.toJSON());

结果:

{ _id: 522259ad3621834411000001, twitter: { id: 'wiredprairie' } }