如上图 的 ‘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); });
折腾了一下午不解,希望有大神指点一下,不胜感激!
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 真的不能为{}吗?我试了下,可以呢?
难道没有童鞋遇到类似的问题
干嘛非要是一个{}对象,js又不是强类型,你就算现在存一个空字符串想改为对象的时候改就行了,何苦为难自己
你默认给post对象传入一个占位用的值不就得了,只用来占位,没有实际意义的一个key-value
@naruto900814 虽然不是根治问题,但是总是一种解决方案!谢谢您~
@hpgt 设定成空字符串的话,ejs解析会报未定义的错……
@yushijie 也是无奈的办法 自豪地采用 CNodeJS ionic
@yushijie 这样啊,我一直没用ejs,用的hbs,帮不了楼主了。。。
schema里定义了相关的字段了么
存成new Map()