Mongodb Pymongo使用$ set创建数组/列表/集合

时间:2016-01-10 01:30:15

标签: python arrays mongodb syntax pymongo

我正在尝试使用$ 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是另一种选择,但它不使用点符号,所以我不能在我的情况下使用它。)

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你只想用一条指令来做,但是从没有创建任何密钥开始,这是唯一的方法($ set永远不会创建一个不明确的数组,如{ $ set:{somekey:[]}}

db.test.update({_id:(unique id)}, 
{$push: {"Information.Class_Info": { "Class_Name":"Math" }}})

此查询可以解决问题,将需要创建的对象推送到不存在的键(Information.Class_Info)作为数组。这是唯一可能只有一条指令的解决方案,使用点符号并且有效。