Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mongo推送到阵列内部的阵列_Python_Mongodb - Fatal编程技术网

Python Mongo推送到阵列内部的阵列

Python Mongo推送到阵列内部的阵列,python,mongodb,Python,Mongodb,我是mongo的新手,到目前为止使用它没有问题。直到我坚持这一点。我需要将文档推送到数组中的数组中。可以参考下面的json { 'user_id':'{1231mjnD-32JIjn-3213}', 'name':'John', 'campaigns': [ { 'campaign_id':3221, 'start_date':'12-01-2012',

我是mongo的新手,到目前为止使用它没有问题。直到我坚持这一点。我需要将文档推送到数组中的数组中。可以参考下面的json

{
    'user_id':'{1231mjnD-32JIjn-3213}',
    'name':'John',
    'campaigns':
        [
            {
                'campaign_id':3221,
                'start_date':'12-01-2012',
                'messages':
                    [
                        {
                            'message_id':211134,
                            'email':'john@gmail.com'
                        }
                    ]
            },
            {
                'campaign_id':3222,
                'start_date':'13-01-2012',
                'messages':
                    [
                        {
                            'message_id':315521,
                            'email':'john@gmail.com'
                        }
                    ]
            }
        ]
}
我想将一个文档推送到活动数组中的消息数组中(无论顺序如何)。也就是说,我需要将新文档附加到消息数组中。所有这些消息都来自另一个阵列或每个用户的活动。我正在使用python,所以我的代码是这样的

query = {"user_id" : "{1231mjnD-32JIjn-3213}", "campaigns.campaign_id": 3221}
message = {"message_id":4213122, "email":"john@gmail.com"}
op = {"$push" : {"campaigns.messages":message}}
mongo.TestDatabase.members.update(query, op)

执行时没有错误。但文档似乎没有任何更改(没有进行更新)。我做错了什么?

在数组中放置数组几乎总是一个坏主意,原因有很多。我把这些活动放在一个专门的集合中,使它们成为顶级文档

也就是说,您可以通过以下方式推送到特定活动的消息数组:

db.members.update(
    {"user_id" : "{1231mjnD-32JIjn-3213}", "campaigns.campaign_id": 3221},
    {$push:{"campaigns.$.messages":{"message_id":4213122, "email":"john@gmail.com"}}}
)

谢谢你的解决方案。它确实奏效了。是的,我同意你的看法,数组中的数组是个坏主意。我现在可以从我的代码中看到它。有点乱(是的,更重要的是,在不覆盖整个数组的情况下,不能编辑消息,因为不允许使用多个位置运算符($)。修复此问题。啊,这就是我刚才搜索的内容。我正在查找是否有任何方法可以使用多个位置运算符。因此,请确认我们无法使用它。此外,我还收到以下异常:异常:无法使用字符串字段名[$]将其追加到数组代码:13048 503ms。非常感谢。:)