求教如何使用mongoose存入 值为 空对象 的数据?
发布于 10 年前 作者 yushijie 7449 次浏览 最后一次编辑是 8 年前 来自 问答

QQ截图20150228182155.png 如上图 的 ‘reprint_info’ : {} 这一条数据

贴一段核心代码: var postSchema = new mongoose.Schema({ title: String, comments: [], reprint_info: {}, pv: 0 }); …… var post = { title: ‘test’, comments: [], //空数组是可以的 reprint_info: {}, //但是像这行的{},最后在mongodb里就没有这条数据 pv: 0 }; var newPost = new postModel(post); newPost.save(function (err, post) { if (err) return callback(err); callback(null, post); });

折腾了一下午不解,希望有大神指点一下,不胜感激!
18 回复

T-T 跪求不要沉了……

mongodb里,要么字段的值为null,要么这条记录就不要这个字段,不能存成{}

试下type:mixed default:{} 呢?

Schema 设置default

为什么一定要存一条空数据呢?可以选择不存,然后取的时候就是null,不是很明白一定要存成{}的原因

@iamcc 谢谢您的解答,但是设置default参数以后,还是不行……我猜想是

实体post里reprint_info直接写{}不行,但是换成 new Object() 存入后依旧没有reprint_info这一条

@lastsaga 谢谢您的解答,设置了default后实体里怎么写呢?按照官方api,实体里不用写这个字段了,但是我实验了数据库里依旧不会有这一项

官方文档: var schema = new Schema({ n: { type: Number, default: 10 }) var M = db.model(‘M’, schema) var m = new M; console.log(m.n) // 10 我实验了,写Number是ok的,但是{type:Mixed, default: {} },却还是不行

@CocaCola183 存空数据是因为这样的:

在ejs模版里解析时会有一条这么写 <% if (post.reprint_info) { %> …… <% } %> 就是说哪怕reprint_info这个字段没有值,但是需要起码有这个字段,哪怕是空值。如果数据库里根本没有这个字段,node就不会跑起来,会报错,说reprint_info未定义

@SoaringTiger 真的不能为{}吗?我试了下,可以呢? QQ截图20150302104147.png QQ截图20150302104213.png

难道没有童鞋遇到类似的问题 untitled1.png

干嘛非要是一个{}对象,js又不是强类型,你就算现在存一个空字符串想改为对象的时候改就行了,何苦为难自己

你默认给post对象传入一个占位用的值不就得了,只用来占位,没有实际意义的一个key-value

@naruto900814 虽然不是根治问题,但是总是一种解决方案!谢谢您~

@hpgt 设定成空字符串的话,ejs解析会报未定义的错……

@yushijie 也是无奈的办法 自豪地采用 CNodeJS ionic

@yushijie 这样啊,我一直没用ejs,用的hbs,帮不了楼主了。。。

schema里定义了相关的字段了么

存成new Map()

回到顶部