0
我正在試圖找到一個用戶名和密碼相匹配的用戶名。 我有一個辦公室集合,每個Office文檔包含許多用戶文檔集合中的MongoDb搜索只返回完全匹配的結果 - 爲什麼?
var builder = Builders<MnOffice>.Filter;
var filter = builder.AnyEq(o => o.Users, new OfficeUser()
{
Username = username,
Password = password
});
var office = await Offices.Find(filter).FirstOrDefaultAsync().ConfigureAwait(false);
return office;
上面的查詢返回null。儘管它應該得到結果。 OfficeUser類具有三個屬性, 用戶名,密碼和名稱。 Mongo強制我所有的三個屬性將在查詢中匹配, 我所希望的是有2個屬性匹配(用戶名和密碼) 爲了得到結果, 如何做到這一點?沒有好的文件。
謝謝!
區別在於參數[**'$ elemMatch' **](http://docs.mongodb.org/manual/reference/operator/query/elemMatch/)本身就是另一個「查詢」。該查詢詢問「這些屬性是否與數組內的子文檔匹配」。沒有**'$ elemMatch'的區別是,它詢問「數組中的子文檔*是否匹配這個?」,就像詢問fieldA =「b」一樣,你問的是arrayC = {「d」: 「e」,「f」:g}。當然,因爲所有的元素都有更多的字段,所以沒有匹配。 –
好吧,如果我想要相同的確切文檔,我必須爲查詢提供確切的模型,然後纔有意義,但是如同LINQ查詢甚至SQL查詢一樣,當您搜索並取出一個參數時,您總是會假設這在查詢本身中不會考慮到。有趣的是,知道沒有額外字段的文檔會發生什麼,它會找到那些還是不是? –
我能說什麼是,這不是LINQ或SQL。同時也考慮到LINQ最初是在設計時考慮了SQL映射。 –