MongoDB проверяет, существует ли элемент списка для элемента в коллекции, перед вставкой в ​​БД - PullRequest
0 голосов
/ 15 ноября 2018

Я занимаюсь разработкой приложения django для Python и mongoDB. Я разрабатываю форму и принимаю пользовательские данные и сохраняю их в БД. Перед вставкой я хочу проверить, есть ли данные в базе данных.

У меня есть коллекция монго, которая выглядит примерно так:

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 Если пользователь новый пользователь, вставьте непосредственно в базу данных. Если вы старый пользователь, проверьте, присутствуют ли введенные пользователем города в БД, если нет, то обновите БД, иначе выведите сообщение в 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 - это строка

Может кто-нибудь, пожалуйста, помогите мне с этим

...