Для плоских объектов это довольно ясно:
db.col.find({status: "D", title: "sometitle"})
работает как неявное И, поэтому в сопоставленном документе может быть больше полей, и он будет возвращен запросом. Так что это будет работать и для:
{status: "D", title: "sometitle", otherField: false}
Момент, когда начинается неоднозначность и путаница, - это когда у вас есть вложенные объекты, такие как:
{ subObject: {status: "D", title: "sometitle", otherField: false} }
Рекомендуемый синтаксис, который все еще действует как неявный и это точечная запись:
db.col.find({"subObject.status": "D", "subObject.title": "sometitle"})
Это работает так же, как и в первом примере, и дает вам возможность выполнять запросы по подполям. Это синтаксис, который вы будете использовать в большинстве случаев, и он будет возвращать документы с другими полями, не указанными в запросе.
Последняя часть - это совпадение равенства для подобъектов, которое менее популярно, и всех свойств. в этом случае должны совпадать, поэтому:
db.col.find({ subObject: {status: "D", title: "sometitle", otherField: false} })
вернет документ, но:
db.col.find({ subObject: {status: "D", title: "sometitle"} })
не вернет ничего, так как в документе есть больше полей. Столь длинная история, используйте обозначение точка .