【问题标题】:Mongodb Pymongo using $set to create an array/list/collectionMongodb Pymongo 使用 $set 创建数组/列表/集合
【发布时间】:2016-04-14 13:13:25
【问题描述】:

我正在尝试使用 $set 创建一个数组/列表/集合(不确定哪个是正确的术语),但我不知道该怎么做。例如:

我有一个文档插入到我的数据库中,如下所示:

"_id": (unique, auto-generated id)
"Grade": Sophomore

我想使用更新插入一个集合/列表/数组。所以,基本上我想要这个:

"_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 是另一种选择,但它不使用点表示法,所以在我的情况下我不能真正使用它)。

谢谢!

【问题讨论】:

  • 你为什么要为你自己的question创建一个副本。
  • 它们是不同的问题,在一个我问关于插入数组的问题中,这是创建一个全新的数组

标签: python arrays mongodb syntax pymongo


【解决方案1】:

如果您只想使用一条指令执行此操作,但从尚未创建任何密钥开始,这是唯一的方法($set 永远不会创建不明确的数组,例如 { $set : {某个键:[] } }

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2014-11-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多