2014-11-11 3 views
0

У меня есть данные в базе данных Монго, и моя коллекция имеет два поля, а именно created_at, text, я хочу, чтобы извлечь документы, имеющие такие слова, как bank, chile и fin в тексте поля и имеющие created_at Значение как jan 15.. Я новичок в MongoDB, и когда я пытался использовать ниже запрос он дает ошибку как «неожиданный лексем»Монго дб запроса с и

запроса:

db.tweet.find({$and : [{"created_at" : /.*jan 15.*/i}, {"text : /.*bank.*/i, /.*chile.*/i, /.*fin.*/i "}]}) 

Пожалуйста, предложите мне corrections.Thanks заранее

ответ

1

Это написано неправильно. Частично в избыточном использовании $and, где он не нужен, а во-вторых, я думаю, вы имеете в виду $or для второго условия. Что на самом деле переводится с помощью формы регулярных выражений в легком смысле:

db.tweet.find({ 
    "created_at": /.*jan 15.*/i, 
    "text": /bank|chile|fin/i 
}) 

На самом деле, использование «границы слов» для более точного «слова» соответствия:

db.tweet.find({ 
    "created_at": /.*jan 15.*/i, 
    "text": /\bbank\b|\bchile\b|\bfin\b/i 
}) 

Если вы на самом деле означает «и », что означает, что поле« текст »должно содержать« все »этих строк, тогда вам нужен оператор $and. Но разные, как вы сделали это:

db.tweet.find({ 
    "created_at": /.*jan 15.*/i, 
    "$and": [ 
     { "text": /.*bank.*/i }, 
     { "text": /.*chile.*/i }, 
     { "text": /.*fin.*/i } 
    ] 
} 

Целью $and является разрешение «массив» построить где упоминается «тот же» имя поля для различных условий. Это значит, что структура действительна и «имена ключей» не дублируются.

В противном случае все Аргументы MongoDB неявно являются аргументом «и».

+0

спасибо за ваше предложение, я хочу, чтобы оператор и оператор в текстовом поле, но когда я использую ваш третий (последний) запрос, он не дает мне ничего, кроме «...» –

+0

Вам понадобится текстовое поле, подобное этому в порядок для этого: '« В чили есть банк, который размещается у коренного корень ». Если это не то, что вы хотите, последняя форма - это не то, что вы хотите, и вы имеете в виду «или». –

+0

alrite, спасибо за вашу помощь, оцените его –