我正在尝试使用$ set来创建一个数组/列表/集合(不确定哪个是正确的术语),我不知道该怎么做。例如:
我在我的数据库中插入了一个文档,如下所示:
"_id": (unique, auto-generated id)
"Grade": Sophomore
我想使用update插入一个集合/列表/数组。所以,基本上我想要这个:
"_id": (unique, auto-generated id)
"Grade": Sophomore
"Information"{
"Class_Info": [
{"Class_Name": "Math"}
]
到目前为止,我一直在使用.update和点符号。所以,我试图做的是使用这样的$ set:
collection.update({'_id': unique ID}, {'$set': {'Information.Class_Info.Class_Name': 'Math}})
然而,正在做的是使Class_Info成为一个文档而不是列表/集合/数组,所以它正在做:
"_id": (unique id)
"Grade": Sophomore
"Information"{
"Class_Info": {
"Class_Name": "Math"
}
如何指定我希望Class_Info成为列表?如果出于某种原因,我绝对不能使用$ set这样做,因为我的程序的其余部分的工作方式,我可以使用点表示法是非常重要的,所以如果我应该使用$ set以外的其他东西,可以它有点符号来指定列表的插入位置? (我知道$ push是另一种选择,但它不使用点符号,所以我不能在我的情况下使用它。)
谢谢!
答案 0 :(得分:1)
如果你只想用一条指令来做,但是从没有创建任何密钥开始,这是唯一的方法($ set永远不会创建一个不明确的数组,如{ $ set:{somekey:[]}}
db.test.update({_id:(unique id)},
{$push: {"Information.Class_Info": { "Class_Name":"Math" }}})
此查询可以解决问题,将需要创建的对象推送到不存在的键(Information.Class_Info)作为数组。这是唯一可能只有一条指令的解决方案,使用点符号并且有效。