У меня есть эта коллекция в моей базе данных test
.MongoDB - странное поведение поиска по встроенному документу
[test] 2014-02-11 18:45:48.338 >>> db.blog.posts.find();
{
"_id" : ObjectId("52ee29bdb8eb94049427886a"),
"comments" : [
{
"author" : "Jane",
"comment" : "yes, yes, it is",
"votes" : 5
}
],
"content" : "This is a post",
"id" : 5
}
{
"_id" : ObjectId("52f95c5bd1fe9c171fe4344b"),
"comments" : [
{
"author" : "Jane",
"comment" : "yes, yes, it is",
"votes" : 5
},
{
"author" : "Nick",
"comment" : "test",
"votes" : 10
},
{
"author" : "John",
"comment" : "new one",
"votes" : 4
}
],
"content" : "This is a post",
"id" : 5
}
Когда я запускаю этот запрос: найти
[test] 2014-02-11 18:45:50.318 >>> db.blog.posts.find({ "comments" : {author : "Jane", comment: "yes, yes, it is", votes: 5}});
я получаю как документы обратно.
Но если я запускаю этот запрос найти
[test] 2014-02-11 18:46:18.428 >>> db.blog.posts.find({ "comments" : {author : "Jane", comment: "yes, yes, it is", votes: {$gte : 5}}});
я не получаю документы обратно.
Почему? Как получилось, что == 5 возвращает результаты, но> = 5 ничего не возвращает.
Очень хорошо. Возможно, это поможет объяснить причину, по которой первый запрос работал, а второй - нет, потому что в первом случае были s документы, которые удовлетворяли запрошенной * точной * форме. Второй случай использует модификатор * *, поэтому необходимо обернуть с помощью ** $ elemMatch ** –
@NeilLunn Спасибо и спасибо quy, который тоже ответил. –