mongodb创建数据时多出空数组问题

发布于 2022-09-05 14:56:47 字数 766 浏览 9 评论 0

var testSchema=new mongoose.Schema({
   user:{ username:String,
        password:String
        },
   contents:{
        title:String,
        poster:String,
        post:String,
        time:Date,
        imgs:[],
        comment:[]
    }) 

这是Schema,在测试练习时创建用户信息后,查询用户信息时数据显示为:

{ __v: 0,
  _id: 59a10d3d4158fd0f84585b8b,
  contents: { comment: [], imgs: [] },
  user: { username: 'bob', password: '123' } }
{ __v: 0,
  _id: 59a110d44158fd0f84585b8c,
  contents: { comment: [], imgs: [] },
  user: { username: 'mm', password: '123' } }

为什么会多出contents: { comment: [], imgs: [] }这条,后台create的时候明明是:
按照这个结构user:{ username: uname,password: upassword}创建的,但是就是会多出contents: { comment: [], imgs: [] },是哪里出错了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

比忠 2022-09-12 14:56:47

创建时不存在错误,查询时做一个过滤就好。
只返回集合中的某个属性的话,你这里是user属性。
你需要插入一个额外的参数,{wishProperty:1}
指定希望返回的键的名称,并且在声明赋值为1。

db.users.find({"user.username":"bob"},{user:1})
db.users.find({"user.username":"mm"},{user:1})

上面的是在mongo-shell中的代码,在mongoose或者mongodb模块环境下的实现可能略有不同。
但是总体思维和逻辑是正确的。
因为无论你create时是否定义了contents,新实例都会默认附加上contens,因为这和mongoose的设计思想有关,mongoose本身就是为了让数据库中的数据更加易创建和易管理。
试想一下,加入mongoose没有为你新创建的用户添加contents属性,那么将来当你需要为contents属性添加数据时,添加到哪儿去?
所以说,在查询时去做一个过滤就好

往事风中埋 2022-09-12 14:56:47

这是mongoose的一些操作机制, Schema指定默认值

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文