2015-04-29 4 views
2

Я могу найти только примеры, чтобы определить, существуют ли конкретные ключи.MongoDB: Как определить конкретное значение не существует

У меня есть конкретные документы, в моем случае MongoDB, которые имеют поля, как это:

 "actions" : [ 
      { 
        "date" : "2015-03-09T15:28:03Z", 
        "reason" : "", 
        "begin_date" : "2015-03-09T15:28:03Z", 
        "end_date" : "2015-03-09T15:28:03Z", 
        "action_type" : "Block", 
        "performed_date" : "2015-03-09T15:28:03Z", 
        "active" : "on", 
      }, 
      { 
        "date" : "2015-03-09T15:28:03Z", 
        "reason" : "", 
        "begin_date" : "2015-03-09T15:28:03Z", 
        "end_date" : "2015-03-09T15:28:03Z", 
        "action_type" : "Alert", 
        "performed_date" : "2015-03-09T15:28:03Z", 
        "active" : "on", 
      }, 
      { 
        "date" : "2015-03-09T15:28:03Z", 
        "reason" : "None", 
        "begin_date" : "2015-03-09T15:28:03Z", 
        "end_date" : "2015-03-09T15:28:03Z", 
        "action_type" : "History", 
        "performed_date" : "2015-03-09T15:28:03Z", 
        "active" : "on", 
      } 
    ], 

Сейчас я пытаюсь создать запрос, чтобы вернуть все записи, где «ACTION_TYPE»: «История» не существует ,

Я знаю, что оператор $ exists может сказать мне, существует ли ключ «action_type», но я не могу найти никаких примеров, чтобы сообщить мне, где я могу указать, какое значение не существует.

В моей голове я хочу сказать, что это что-то вроде этого (но, очевидно, это не работает):

db.collection.find({ "actions":{"$elemMatch":{"action_type": "History"}} : { '$exists': false} }) 

Надеюсь, это намного проще, чем я делаю это, чтобы быть.

ответ

1

Это должно работать:

db.collection.find({"actions.action_type": {"$ne": "History"}}) 
+0

Да - как я и ожидал, намного проще, чем я думал. Работает отлично, спасибо! – gleb1783

+0

@ gleb1783 Я не думаю, что это дает результаты, которые вы ожидали, и выше запрос не показывает никаких результатов. – Yogesh

1

Вы действительно хотите проверить, не является ли значение? т. е. ключ всегда будет существовать, но вы хотите совпадения, где значение не является «историей».

Если да, то это не Равно оператор:

http://docs.mongodb.org/manual/reference/operator/query/ne/

+0

Да, вы его получили. Я принял ответ Пьера, когда он победил тебя :) – gleb1783

+0

Проклятье, Пьер! : D – CptCoathanger

Смежные вопросы