предположим, что моя БД дает мне результат запроса:
{'_id': ObjectId('5c99d76a32aacf180485c3b3'),
'text': 'ILLUSTRATION : 1\nFind the quotient and remainder q and r for the pairs of positive integers given below:\n(i) 23,4\n(ii) 81,3\n(iii) 12,5\nUTION.\n',
'text2': '',
'parent': None,
'repost': 3,
'time': datetime.datetime(2010, 5, 9, 16, 5, 27, 838000)}
Я хочу получить первые 1000 документов, в которых длина text
или длина text2
> = 5:
Я могу сделать это через Python, но это будет глупо sh Что делать:
objects = []
i = 0
for obj in db.essays.find():
if len(obj['text']>=5) or len(obj['text2']>=5):
objects.append(obj)
i+=1
if i==1000:
break
Я знаю, что это так глупо sh.
Я могу использовать limit(1000)
, если у меня есть точные совпадения, но я не знаю, как получить документы на основе длины значения.
EDIT : Каким-то образом мне удалось сделать PATCH как:
{ "$or":[{"$expr": { "$gt": [ { "$strLenCP": "$text" }, 5 ]}},
{"$expr": { "$gt": [ { "$strLenCP": "$text2" }, 5 ]}},
{"$expr": { "$gt": [ { "$strLenCP": "$text3" }, 5 ]}},
]}
Но когда я использую операцию AND
для получения документов, когда длина всех текстов меньше 3, возникает ошибка:
{ "$and":[{"$expr": { "$lt": [ { "$strLenCP": "$text" }, 5 ]}},
{"$expr": { "$lt": [ { "$strLenCP": "$text2" }, 5 ]}},
{"$expr": { "$lt": [ { "$strLenCP": "$text3" }, 5 ]}},
]}
работает с limit(2)
, но не работает с> 2 и выдает ошибку:
`OperationFailure: $strLenCP requires a string argument, found: null`