我对 mongodb 很陌生,我有点迷失。
我有 mongo 数据库集合,如下所示:
({
_id:id ,
createdAt: new Date(),
name:name,
friends : [{name:1,children:[{name:sarah,age:12}]}],
dogs : [{}]
});
如果名称不存在,我希望能够在朋友数组中插入一个新元素,并在该新数组中插入一个子元素。
伪代码是
If Directory.find id.friends.name = true
update and add a new children document {name:"sarah",age:5}
else
make a new friend element with a new children subdocument
经过大量研究后,人们似乎建议使用 $exist 但我找不到在子文档中使用它的方法'
我已经想出了这个,但它并没有真正起作用,我想知道如何将它用于我的 if else 语句:
db.Directory.find({_id:id},{friends.name:"foo", {"$exists": True}})
对于实际查询
db.Directory.update(
{ _id: id, 'friends.name': "foo" },
{$push: {'friends.$.children': {name:"x",age:"yy"}}}
)
如果它不存在:
db.Directory.insert(
{ _id: id, 'friends.name': "foo" },
{$push: {'friends.$.children': {name:"x",age:"yy"}}}
)
但它并没有真正起作用,我不确定我的公式是否有问题,因为它是来自研究的大量试验和错误。
我也真的不知道这是否是正确的方法,因为我找不到子文档中存在的值的任何内容,并计划尝试进行 Find() 搜索存储该值,然后测试 true 或JS 中的结果为 false 以进行更新/插入调用。
希望有人可以帮忙
编辑 :
假设我想将 {name:john,age:15} 添加到该朋友 name:1
friends : [{name:1,children:[{name:sarah,age:12}]}]
我希望输出是
friends : [{name:1,children:[{name:sarah,age:12},{name:john,age:15}]}]
或者如果名称 1 不存在
friends : []
使其输出
friends : [{name:1,children:[{name:john,age:15}]}]
更新的示例:
案例一:
friends : []
我添加了一个新朋友,名字为“josh”,还有一个孩子 sarah,12 岁,我得到:
friends : [{name:"josh",children:[{name:sarah,age:12}]}]
太棒了。
Now i add a new friend name 2 with children tom 15.
什么都没发生。
之后,我想给乔什添加一个新孩子,蒂米,15岁
I get :
friends : [{name:"josh",children:[{name:timmy,age:12}]}]
然后莎拉就消失了。