Mongodb 如何使用PyMongo将文档添加到集合中的数组

Mongodb 如何使用PyMongo将文档添加到集合中的数组,mongodb,python-3.x,pymongo,Mongodb,Python 3.x,Pymongo,我已将txt文件中的数据提取到NumPy数组中。我现在正试图将这些数据添加到已经存在的集合中的嵌入文档数组中。目前,该数组名为“ratings”,只包含一个字段为空的文档 代码如下: ratings = np.loadtxt('outfile_ratings.sql', skiprows=1) fn = 'outfile_users.sql' with open(fn, encoding="utf-8") as f: lines = f.readlines() [l.strip().spli

我已将txt文件中的数据提取到NumPy数组中。我现在正试图将这些数据添加到已经存在的集合中的嵌入文档数组中。目前,该数组名为“ratings”,只包含一个字段为空的文档

代码如下:

ratings = np.loadtxt('outfile_ratings.sql', skiprows=1)

fn = 'outfile_users.sql'
with open(fn, encoding="utf-8") as f: lines = f.readlines()

[l.strip().split("\t") for l in lines]
users = np.array([l.strip().split("\t") for l in lines])

dbClient = pm.MongoClient()
db = dbClient['moviesDat']
col = db['usersDat']

for i in range(1, 944):
    if np.size(users[i][:]) == 5:
        resInsert = col.insert_one({"_id": users[i][0]})

for i in range(1, 944):
    if np.size(users[i][:]) == 5:
        resUpdate = col.update_one({"_id": users[i][0]},
                                   {"$set": {"age": users[i][1],
                                             "gender": users[i][2],
                                             "occupation": users[i][3],
                                             "zip_code": users[i][4]}})

for row in ratings:
    resUpdate = col.update_one({"_id": row[0]},
                               {"$addToSet": {"ratings": {"rating": " ",
                                                          "movie_id": " ",
                                                          "timestamp": " "}}})

for row in ratings:
    resUpdate = col.update_one({"_id": str(row[0])},
                               {"$push": { "ratings": {"rating": row[2],
                                                            "movie_id": row[1],
                                                            "timestamp": row[3]}}})
在update_one()的最后一个调用中,我使用
$push
操作符将值添加到嵌入的文档字段中,但没有效果

如何将数据添加到集合中的数组中

编辑:…和数据集文件:

outfile_ratings.sql:

user    movie   rating  timestamp
1   1   5   874965758
1   2   3   876893171
1   3   4   878542960
1   4   3   876893119
1   5   3   889751712
1   6   5   887431973
1   7   4   875071561
1   8   1   875072484

outfile_users.sql:

id  age gender  occupation  zip_code
1   24  M   technician  85711
2   53  F   other   94043
3   23  M   writer  32067
4   24  M   technician  43537
5   33  F   other   15213
6   42  M   executive   98101
7   57  M   administrator   91344

好吧,我所能建议的就是确保集合中有一个文档,其_id等于第[0]行。如果此文档不存在,则更新不会产生任何影响

我稍微修改了代码(主要是如何获取数据库和集合),看起来是这样的

from pymongo import MongoClient

mongoServer = "mongodb://localhost:27017"
mongoDb = "moviesDat"
mongoCol = "userDat"

client = MongoClient(mongoServer)
db = client.get_database(mongoDb)
col = db.get_collection(mongoCol)
rattings = []

# Data generation for testing purpose.    
# for i in range(1, 4):
#     rattings.append([0, i*1, i*2, i*3])

# assuming rattings is a valid collection with valid data
for row in rattings:
    col.update_one({"_id": row[0]}, {"$push": {"rattings": {"ratting": row[1], "movie_id": row[2], "timestamp": row[3]}}})
我可以看到它正在将行推到集合

userDat集合应如下所示:

{ 
    "_id" : 0.0, 
    "producer" : "james", 
    "rattings" : [
        {
            "timestamp" : 3, 
            "movie_id" : 2, 
            "ratting" : 1
        }, 
        {
            "timestamp" : 6, 
            "movie_id" : 4, 
            "ratting" : 2
        }, 
        {
            "timestamp" : 9, 
            "movie_id" : 6, 
            "ratting" : 3
        }  
    ]
}

您可以附加示例数据集吗?outfile_user.sql的内容。如果您的数据集不太大,您还可以使用$push$每个语法一次传递整个数组,并让mongodb扩展数组。我如何包含数据集文件?只需粘贴到上面几行。编辑了文章。太好了!。假设您已经正确填充了rattings,并且行中包含预期的数据,请参见下面的答案。它应该做预期的事情。