CNode

求教如何使用mongoose存入 值为 空对象 的数据?

问答
Yyushijie发布于11 年前最后回复8 年前18 回复8553 浏览0 收藏

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)

Y
yushijie#1·11 年前

T-T 跪求不要沉了……

S
SoaringTiger#2·11 年前

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

I
iamcc#3·11 年前

试下type:mixed default:{} 呢?

L
lastsaga#4·11 年前

Schema 设置default

C
CocaCola183#5·11 年前

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

Y
yushijie#6·11 年前
引用 iamcc试下type:mixed default:{} 呢?

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

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

Y
yushijie#7·11 年前
引用 lastsagaSchema 设置default

@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: {} },却还是不行

Y
yushijie#8·11 年前
引用 CocaCola183为什么一定要存一条空数据呢?可以选择不存,然后取的时候就是null,不是很明白一定要存成{}的原因

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

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

Y
yushijie#9·11 年前
Y
yushijie#10·11 年前

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

Y
yuedun#11·11 年前

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

N
naruto900814#12·11 年前

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

Y
yushijie#13·11 年前
引用 naruto900814你默认给post对象传入一个占位用的值不就得了,只用来占位,没有实际意义的一个key value

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

S
simon4546#17·11 年前

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

Q
QLLNNH#18·8 年前

存成new Map()

参与回复
登录后即可参与回复。登录