mongodb查詢內嵌文檔

來源:互聯網
上載者:User

假設有這樣一個文檔:
db.XXX.remove();

db.XXX.insert({"id":1, "members":[{"name":"BuleRiver1", "age":27, "gender":"M"}, {"name":"BuleRiver2", "age":23, "gender":"F"}, {"name":"BuleRiver3", "age":21, "gender":"M"}]});

不能使用db.XXX.find({"members":{"name":"BuleRiver1"}});進行查詢,查詢的結果是空集。只有完全符合一個的時候才能擷取到結果,因此:

db.XXX.find({"members":{"name":"BuleRiver1", "age":27, "gender":"M"}});

可以得到結果。

如果把索引值進行顛倒,也得不到結果:

db.XXX.find({"members":{"age":27, "name":"BuleRiver1", "gender":"M"}});

得到的結果是空集

我們這樣查詢:

db.XXX.find({"members.name":"BuleRiver1"});

是可以查詢出結果的。

如果需要兩個屬性:

db.XXX.find({"members.name":"BuleRiver1", "members.age":27});

也可以查詢出結果。

我們再進行破壞性嘗試:

db.XXX.find({"members.name":"BuleRiver1", "members.age":23});

也可以查詢出結果。

不過我們應該注意到:BuleRiver1是數組中第一個元素的索引值,而23是數組中第二個元素的索引值,這樣也可以查詢出結果。

對於我們的一些應用來說,這顯然不是我們想要的結果。所以我們應該使用$elemMatch:

db.XXX.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":27}}});

可以查詢出結果,而

db.XXX.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":23}}});

查詢不出結果。因此,這正是我們想要的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.