2016-09-05 3 views
0

Я только начал изучать mongoDB. За это время мне удалось создать простую коллекцию со следующими данными,

db.test.insert({name : "joe", age : 20}); 
db.test.insert({name: "james", age : 25}); 

Теперь я опрошен его помощи,

db.test.find({name : {$not : {$eq : "joe", $eq: "james"}}}) 

Это дало мне следующий результат,

{name : "joe", age : 20} 

Я здесь смущен, не является ли это и работает, как показано ниже,

SELECT * FROM test where not name = "joe" and not name = "james" 

Doubt1: Если да, то как вышеупомянутый запрос манго может быть интерпретирован как обычный запрос mysql? [Примечание: я исхожу из фона mysql.] Пожалуйста, объясните.

Doubt2: Также объясните о следующем запросе Монго,

db.test.find({name : "joe", age : 20}); 

ли выше запрос равен select * from test where name='joe' and age=20? Если нет, то как это будет интерпретироваться как обычный запрос mysql?

ответ

4

Если вы создаете объект с помощью {$eq : "joe", $eq: "james"}, вы используете тот же ключ объекта дважды. Таким образом, james перезапишет joe, потому что оба используют один и тот же ключ объекта $eq.

Чтобы сделать ваш запрос, вы можете попробовать что-то вроде NOT (name = "joe" OR name = "james"). Таким образом, вы добавляете OR к вашему Монго запросу:

db.test.find({name : {$nor: [{$eq: "joe"}, $eq: "james"]}}) 

Reference

+0

Он очистил мои сомнения. Я не думал о том, чтобы иметь одинаковые ключи дважды. Спасибо огромное! :) – Mediocre

+0

Ваш запрос дал мне эту ошибку: 'db.test.find ({name: {$ not: {$ or: [{$ eq:" joe "}, {$ eq:" james "}]}}}) Ошибка: ошибка: {"$ err": "Невозможно выполнить канонизацию запроса: неизвестный оператор BadValue: $ или", "code": 17287} ' – Mediocre

+0

Могу ли я использовать' $ или '/' $ и' внутри из '$ not'? – Mediocre

1

Я думаю Christoph очистили ваши сомнения.

Для SQL в Монго запросов эталонным визита this ссылка

+0

Очень полезная ссылка! Спасибо. – Mediocre

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