u011250851
没有梦想-何必远方
2016-01-29 01:43
采纳率: 100%
浏览 3.1k

Mongodb中如何实现一对多?在一个文档中嵌套多个文档?

如题,
我知道如下这样可以在文档中嵌入一个文档:

 db.insertdb.insert({_id:2,by:'测试',auther:{name:'小明',age:23}})

但不知怎么嵌入多个,还有如何在一个已有文档中新添一个子文档,求mongodb前辈告知,多谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • u011250851
    没有梦想-何必远方 2016-02-18 02:07
    已采纳
    点赞 评论
  • oyljerry
    oyljerry 2016-01-29 03:35

    多个文档,就是多个key下面的元素还是一个document。
    添加就是直接update set来设置对应的key的value是一个document类型的数据

    点赞 评论
  • fk002008
    lambda-fk 2016-01-29 08:04

    MONODB的数据文档是JSON,利用JS的知识看它

    var doc = {K:V} ;
    doc[k] = V;
    这不就是js的对象使用方法么
    你说给js一个对象动态添加属性怎么玩呢?
    doc.addPro = xxxx
    这就是文档对象添加属性了

    如果是嵌套的,那也一样,假设这里的V是嵌套的子文档
    那么 doc[k]就是V了,嘿嘿整体法看看
    V又是是一个文档,假设它的key是k1
    doc[k][k1]
    你发现规律了么?
    是不是很象二维数组
    不嵌套文档是 一个[]
    嵌套一个文档是 [][]

    归纳下,嵌套n个文档就是 doc[][][].......[]总共有n+1个[]

    我们使用js操作了这个文档对象之后,只要把它在更新到数据库中就可以了。

    记住本质操作是 js

    点赞 评论
  • fk002008
    lambda-fk 2016-01-29 11:22

    不是阿,你使用的是修改器,其实本质就是对象没有这个属性的时候那就新加入一个属性

    我给你回答的是在这个对象的使用方面上文档对象 使用方法就是js
    可不是mongodb的语法与js一样。

    像你提的这个问题:
    可以把这个对象查找出来再用我给你提供的方法解决
    var doc = db.myFirstCollection.findOne({_id:1}) //使用id查找出来这个对象。
    然后你进行doc的更新
    doc.auther = [{name:1},{name:2},{name:3}] //这个属性操作和js一样
    然后你把这个doc更新到db中
    db.myFirstCollection.update({_id:1},doc)

    修改器只不过是简化了上面的操作而已

    我给你演示的是它更具有普适性的操作。
    $inc ,$set 都是对象没有属性的时候就添加一个
    这种动态性思想是js的

    点赞 评论

相关推荐