问题描述
- Mongodb中如何实现一对多?在一个文档中嵌套多个文档?
-
如题,
我知道如下这样可以在文档中嵌入一个文档:db.insertdb.insert({_id:2,by:'测试',auther:{name:'小明',age:23}})
但不知怎么嵌入多个,还有如何在一个已有文档中新添一个子文档,求mongodb前辈告知,多谢!
解决方案
不是阿,你使用的是修改器,其实本质就是对象没有这个属性的时候那就新加入一个属性
我给你回答的是在这个对象的使用方面上文档对象 使用方法就是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的
解决方案二:
多个文档,就是多个key下面的元素还是一个document。
添加就是直接update set来设置对应的key的value是一个document类型的数据
解决方案三:
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
解决方案四:
此贴完结。http://blog.csdn.net/lichangzai/article/details/50680949