MongoDB在插入数据库之前先检查集合中某项是否存在列表项

时间:2018-11-15 14:16:50

标签: python django mongodb pymongo

我正在开发uisng python和mongoDB的Django应用程序。我正在开发表单,并接受用户输入并保存到数据库。  在插入之前,我要检查数据库是否已经存在数据。

我有一个mongo集合,看起来像下面这样:

coll_1:

  { "_id" : ObjectId("56e0a3a2d59feaa43fba49d5"), "timestamp" : ISODate("2017-11-18T10:23:29.620Z"), "City_list" : "[PN-City1, PN-City2,PN-City3, PN-City4]", "LDE" :  "LDE-1234, LDE-345, LDE-456" , "Name": "ABC"}
  { "_id" : ObjectId("56e0a3a2d59feaa43fba49d6"), "timestamp" : ISODate("2016-12-18T10:23:29.620Z"), "City_list" : "[PN-City4, PN-City5,PN-City6,PN- City7]", "LDE" : "LDE-444, LDE-3445, LDE-456", "Name": "BCD"}
  { "_id" : ObjectId("56e0a3a2d59feaa43fd67873"), "timestamp" : ISODate("2016-12-18T10:23:29.620Z"), "City_list" : "[PN-City1, PN-City6,PN-City9,PN- City10]", "LDE" : "LDE-444, LDE-3445, LDE-456", "Name": "XYZ"}

我有一个输入用户名的表格:名称,城市(一个或多个逗号分隔),LDE(逗号分隔)

在我的脚本中,我想在插入到mongodb中之前进行检查 如果该用户是新用户,则直接插入db。 如果是老用户,请检查用户输入的城市是否已存在于db中(如果未更新),否则请向html抛出一条消息,提示消息说城市已存在于数据库中。

说我的输入是这样的:

 Name: PQR
 City_list : PN-City4, PN-City12
 LDE: LDE-6767

我的代码如下:

if 'Name' in pdata and ('city_list' in pdata and re.match("(PN-\w*-\d)(PN-\w*-\d)*",  pdata['city_list'])):
user_input = pdata['city_list'].split(",")
pname = pdata['Name']
for data in user_input:
    if db.coll_1.find({"Name": pname , 'City_list': { "$in": data}})

这给了我错误。

我该如何实现

我尝试过这样的事情:

for data in user_input:
    data = str(data) # it was taking as unicode
    if (db.coll_1.find({"Name": pname , 'City_list': { "$in": data}}).count() > 0):


Gives error : OperationFailure: $in needs an array

CIty_list是一个字符串

有人可以帮我吗

0 个答案:

没有答案