欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mongodb中嵌套文檔數(shù)組查詢(xún)操作

 更新時(shí)間:2023年07月19日 14:44:23   作者:Ethanchen's notes  
這篇文章主要介紹了Mongodb對(duì)嵌套文檔數(shù)組進(jìn)行查詢(xún)操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

查詢(xún)非嵌套文檔數(shù)組

非嵌套文檔的數(shù)組,數(shù)組由數(shù)字、字符串等元素組成。 以下方法對(duì)數(shù)組字段進(jìn)行查詢(xún)操作的示例,包括對(duì)數(shù)組匹配查詢(xún),元素的增、刪、改操作,空數(shù)組、非空數(shù)組查詢(xún)等。

測(cè)試數(shù)據(jù)

連接到 mongodb 數(shù)據(jù)庫(kù), 創(chuàng)建集合 user, 批量插入如下測(cè)試數(shù)據(jù) :

sit_rs1:PRIMARY> db.user.insertMany([
...    { name: "user1", age: 10, letter: ["x", "y"], number: [ 2, 6 ] },
...    { name: "user2", age: 20, letter: ["z", "w"], number: [ 2, 8 ] },
...    { name: "user3", age: 30, letter: ["x", "y", "v"], number: [ 2, 21 ] },
...    { name: "user4", age: 45, letter: ["v", "x"], number: [ 2.8, 32 ] },
...    { name: "user5", age: 55, letter: ["w"], number: [ 6, 5.6 ] },
...    { name: "user6", age: 55, letter: ["y", "x"], number: [ 8, 11 ] }
... ]);
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("64b119018d24a8217001e494"),
                ObjectId("64b119018d24a8217001e495"),
                ObjectId("64b119018d24a8217001e496"),
                ObjectId("64b119018d24a8217001e497"),
                ObjectId("64b119018d24a8217001e498"),
                ObjectId("64b119018d24a8217001e499")
        ]
}
sit_rs1:PRIMARY> db.user.find()
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e495"), "name" : "user2", "age" : 20, "letter" : [ "z", "w" ], "number" : [ 2, 8 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e498"), "name" : "user5", "age" : 55, "letter" : [ "w" ], "number" : [ 6, 5.6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }

匹配查詢(xún)

在指定數(shù)組上的使用相等條件,請(qǐng)使用查詢(xún)文檔 { <field>: <value> } 其中 <value>是要匹配的確切數(shù)組,包括元素的順序。

以下示例查詢(xún)數(shù)組 letter 僅包含兩個(gè)元素 [ “x”, “y” ](按指定順序)的所有文檔:

sit_rs1:PRIMARY> db.user.find( { letter: ["x", "y"] } ); 
{ "_id" : ObjectId("64b117978d24a8217001e48f"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }

如果對(duì)于排序不敏感,不關(guān)心排序 ,可以使用 $all 運(yùn)算符,查詢(xún)包括 “x”, “y” 的元素, 注意,這個(gè)是查詢(xún)要有包含兩個(gè)元素的文檔都會(huì)匹配, 兩個(gè)元素都要有才行。 $all 和 $in 不同,$in 是匹配數(shù)組中指定的任何值。如下:

# 匹配包含查詢(xún)中指定的所有元素的數(shù)組。
sit_rs1:PRIMARY> db.user.find( { letter: { $all: ["x", "y"] } } )
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
# 匹配數(shù)組中指定的任何值
sit_rs1:PRIMARY> db.user.find( { letter: { $in: ["x", "y"] } } )
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }

要查詢(xún)數(shù)組字段是否至少包含一個(gè)具有指定值的元素,請(qǐng)使用過(guò)濾器 { <field>: <value> } 其中 <value>是元素值。 這個(gè)查詢(xún)也可以使用 $all 操作符。

sit_rs1:PRIMARY> db.user.find( { letter: "x" } )
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
sit_rs1:PRIMARY> db.user.find( { letter: { $all: ["x"] } } )
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }

要指定數(shù)組字段中元素的條件, 請(qǐng)使用 { <array field>: { <operator1>: <value1>, … } } ,比如查詢(xún) number 至少包含一個(gè)值大于8 的, $elemMatch , 如果數(shù)組字段中的元素符合所有指定$elemMatch條件,則選擇文檔。

# 查詢(xún) number 至少包含一個(gè)值大于8 的
sit_rs1:PRIMARY> db.user.find( { number: { $gt: 8 } } )
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
# 查詢(xún) number 至少包含一個(gè)值大于8 的 并且小于 20 的
sit_rs1:PRIMARY> db.user.find( { number: { $elemMatch: { $gt: 8, $lt: 20 } } } )
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }

索引下標(biāo)

通過(guò)數(shù)組索引位置查詢(xún)?cè)? 使用點(diǎn)表示法,您可以為數(shù)組的特定索引或位置處的元素指定查詢(xún)條件。該數(shù)組使用從零開(kāi)始的索引。注意: 使用點(diǎn)表示法查詢(xún)時(shí),字段和嵌套字段必須在引號(hào)內(nèi)。

# 以下示例查詢(xún)數(shù)組中 number 第一個(gè)元素大于5 的所有文檔:
sit_rs1:PRIMARY> db.user.find( { "number.0": { $gt: 5 } } )
{ "_id" : ObjectId("64b119018d24a8217001e498"), "name" : "user5", "age" : 55, "letter" : [ "w" ], "number" : [ 6, 5.6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
# 以下示例查詢(xún)數(shù)組中 number 第二個(gè)元素大于8 的所有文檔:
sit_rs1:PRIMARY> db.user.find( { "number.1": { $gt: 8 } } )
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }

使用 $size 運(yùn)算符按元素?cái)?shù)量查詢(xún)數(shù)組。例如,以下選擇數(shù)組 letter 具有 2 個(gè)元素的文檔。通過(guò) $size 運(yùn)算符可以用來(lái)判斷數(shù)組是否為空。

# 查詢(xún) 數(shù)組 letter  具有 2 個(gè)元素的文檔
sit_rs1:PRIMARY> db.user.find( { "letter": { $size: 2 } } )
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e495"), "name" : "user2", "age" : 20, "letter" : [ "z", "w" ], "number" : [ 2, 8 ] }
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
sit_rs1:PRIMARY>  db.user.insertMany([
...  { name: "user7", age: 10, letter: [], number: [  ] },
...  { name: "user8", age: 11, letter: [], number: [  ] }
...  ])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("64b505228233a7361a2079b5"),
                ObjectId("64b505228233a7361a2079b6")
        ]
}
# 查詢(xún) 數(shù)組 letter 為空的文檔
sit_rs1:PRIMARY> db.user.find( { "letter": { $size: 0 } } )
{ "_id" : ObjectId("64b505228233a7361a2079b6"), "name" : "user8", "age" : 11, "letter" : [ ], "number" : [ ] }
{ "_id" : ObjectId("64b505228233a7361a2079b5"), "name" : "user7", "age" : 10, "letter" : [ ], "number" : [ ] }
# 查詢(xún) 數(shù)組 letter 為空的文檔--通過(guò)匹配的方法
sit_rs1:PRIMARY> db.user.find( { "letter": [] } )
{ "_id" : ObjectId("64b505228233a7361a2079b6"), "name" : "user8", "age" : 11, "letter" : [ ], "number" : [ ] }
{ "_id" : ObjectId("64b505228233a7361a2079b5"), "name" : "user7", "age" : 10, "letter" : [ ], "number" : [ ] }

如何查詢(xún)數(shù)組元素不為空呢? $size 只能查詢(xún)?nèi)绻麛?shù)組字段具有指定大小,則選擇文檔。 我們要查詢(xún)不為空的,就是數(shù)組長(zhǎng)度大于0的數(shù)組,或者不為[]的數(shù)組?;蛘呤褂?where運(yùn)算符。如下:

$where: 運(yùn)算符將包含 JavaScript 表達(dá)式的字符串或完整的 JavaScript 函數(shù)傳遞給查詢(xún)系統(tǒng)。這提供了更大的靈活性,但要求數(shù)據(jù)庫(kù)處理集合中每個(gè)文檔的 JavaScript 表達(dá)式或函數(shù)。this使用或引用 JavaScript 表達(dá)式或函數(shù)中的文檔obj。

# \$ne匹配所有不等于指定值的值。
sit_rs1:PRIMARY> db.user.find( { "letter": { $ne: []}} )
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e495"), "name" : "user2", "age" : 20, "letter" : [ "z", "w" ], "number" : [ 2, 8 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e498"), "name" : "user5", "age" : 55, "letter" : [ "w" ], "number" : [ 6, 5.6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
# 查詢(xún)數(shù)組存在第一個(gè)元素,存在即不為空數(shù)組
sit_rs1:PRIMARY> db.user.find( { "letter.0": { $exists: true } } )
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e495"), "name" : "user2", "age" : 20, "letter" : [ "z", "w" ], "number" : [ 2, 8 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e498"), "name" : "user5", "age" : 55, "letter" : [ "w" ], "number" : [ 6, 5.6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }
# \$where匹配滿(mǎn)足 JavaScript 表達(dá)式的文檔。
sit_rs1:PRIMARY> db.user.find( { $where:  "this.letter.length>0" } )
{ "_id" : ObjectId("64b119018d24a8217001e497"), "name" : "user4", "age" : 45, "letter" : [ "v", "x" ], "number" : [ 2.8, 32 ] }
{ "_id" : ObjectId("64b119018d24a8217001e495"), "name" : "user2", "age" : 20, "letter" : [ "z", "w" ], "number" : [ 2, 8 ] }
{ "_id" : ObjectId("64b119018d24a8217001e499"), "name" : "user6", "age" : 55, "letter" : [ "y", "x" ], "number" : [ 8, 11 ] }
{ "_id" : ObjectId("64b119018d24a8217001e496"), "name" : "user3", "age" : 30, "letter" : [ "x", "y", "v" ], "number" : [ 2, 21 ] }
{ "_id" : ObjectId("64b119018d24a8217001e498"), "name" : "user5", "age" : 55, "letter" : [ "w" ], "number" : [ 6, 5.6 ] }
{ "_id" : ObjectId("64b119018d24a8217001e494"), "name" : "user1", "age" : 10, "letter" : [ "x", "y" ], "number" : [ 2, 6 ] }

查詢(xún)嵌套文檔數(shù)組

連接到 mongodb 數(shù)據(jù)庫(kù), 創(chuàng)建集合 user, 批量插入如下測(cè)試數(shù)據(jù) :

sit_rs1:PRIMARY> db.user.insertMany([
...  { name: "user1", age: 10, letter: [{"x":"X1", "y":"Y1"}, {"x":"X2", "y":"Y2"}, {"x":"X3", "y":"Y3"}], number: [ { "n1":2, "n2":6 }, { "n1":3, "n2":3 }, { "n1":5, "n2":6 } ] },
...  { name: "user2", age: 20, letter: [{"V":"V1", "y":"Y1"}, {"V":"V2", "y":"Y2"}, {"V":"V3", "y":"Y3"}], number: [ { "n1":1, "n2":3 }, { "n1":4, "n2":5 }, { "n1":7, "n2":6 } ] },
...  { name: "user3", age: 30, letter: [{"V":"V1", "w":"W1"}, {"V":"V2", "w":"W2"}, {"V":"V3", "w":"W3"}], number: [ { "n1":1, "n2":8 }, { "n1":2, "n2":6 }, { "n1":2, "n2":6 } ] },
...  { name: "user4", age: 45, letter: [{"z":"Z1", "w":"W1"}, {"z":"Z2", "w":"W2"}, {"z":"Z3", "w":"W3"}], number: [ { "n1":9, "n2":8 }, { "n1":2, "n2":4 }, { "n1":3, "n2":6 } ] },
...  { name: "user5", age: 55, letter: [{"z":"Z1", "u":"U1"}, {"z":"Z2", "u":"U2"}, {"z":"Z3", "u":"U3"}], number: [ { "n1":7, "n2":8 }, { "n1":8, "n2":4 }, { "n1":4, "n2":6 } ] },
...  { name: "user6", age: 55, letter: [{"t":"T1", "u":"U1"}, {"t":"T2", "u":"U2"}, {"t":"T3", "u":"U3"}], number: [ { "n1":5, "n2":8 }, { "n1":8, "n2":5 }, { "n1":7, "n2":6 } ] },
... ])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("64b621ad9be837dc8e997b6e"),
                ObjectId("64b621ad9be837dc8e997b6f"),
                ObjectId("64b621ad9be837dc8e997b70"),
                ObjectId("64b621ad9be837dc8e997b71"),
                ObjectId("64b621ad9be837dc8e997b72"),
                ObjectId("64b621ad9be837dc8e997b73")
        ]
}
sit_rs1:PRIMARY> db.user.find()
{ "_id" : ObjectId("64b621ad9be837dc8e997b71"), "name" : "user4", "age" : 45, "letter" : [ { "z" : "Z1", "w" : "W1" }, { "z" : "Z2", "w" : "W2" }, { "z" : "Z3", "w" : "W3" } ], "number" : [ { "n1" : 9, "n2" : 8 }, { "n1" : 2, "n2" : 4 }, { "n1" : 3, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b6e"), "name" : "user1", "age" : 10, "letter" : [ { "x" : "X1", "y" : "Y1" }, { "x" : "X2", "y" : "Y2" }, { "x" : "X3", "y" : "Y3" } ], "number" : [ { "n1" : 2, "n2" : 6 }, { "n1" : 3, "n2" : 3 }, { "n1" : 5, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b70"), "name" : "user3", "age" : 30, "letter" : [ { "V" : "V1", "w" : "W1" }, { "V" : "V2", "w" : "W2" }, { "V" : "V3", "w" : "W3" } ], "number" : [ { "n1" : 1, "n2" : 8 }, { "n1" : 2, "n2" : 6 }, { "n1" : 2, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b72"), "name" : "user5", "age" : 55, "letter" : [ { "z" : "Z1", "u" : "U1" }, { "z" : "Z2", "u" : "U2" }, { "z" : "Z3", "u" : "U3" } ], "number" : [ { "n1" : 7, "n2" : 8 }, { "n1" : 8, "n2" : 4 }, { "n1" : 4, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b73"), "name" : "user6", "age" : 55, "letter" : [ { "t" : "T1", "u" : "U1" }, { "t" : "T2", "u" : "U2" }, { "t" : "T3", "u" : "U3" } ], "number" : [ { "n1" : 5, "n2" : 8 }, { "n1" : 8, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b6f"), "name" : "user2", "age" : 20, "letter" : [ { "V" : "V1", "y" : "Y1" }, { "V" : "V2", "y" : "Y2" }, { "V" : "V3", "y" : "Y3" } ], "number" : [ { "n1" : 1, "n2" : 3 }, { "n1" : 4, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }

以下示例選擇數(shù)組中的元素與 letter 指定文檔匹配的所有文檔:整個(gè)嵌入/嵌套文檔的相等匹配需要 指定文檔的精確匹配,包括字段順序。示例 letter 數(shù)組第二個(gè)元素為: { “x” : “X2”, “y” : “Y2” } 與搜索條件匹配。

sit_rs1:PRIMARY> db.user.find( { "letter": {"x":"X2", "y":"Y2"} } )
{ "_id" : ObjectId("64b621ad9be837dc8e997b6e"), "name" : "user1", "age" : 10, "letter" : [ { "x" : "X1", "y" : "Y1" }, { "x" : "X2", "y" : "Y2" }, { "x" : "X3", "y" : "Y3" } ], "number" : [ { "n1" : 2, "n2" : 6 }, { "n1" : 3, "n2" : 3 }, { "n1" : 5, "n2" : 6 } ] }
# 上面的查詢(xún)條件如果調(diào)換順序,則無(wú)法匹配?。。。。?
sit_rs1:PRIMARY> db.user.find( { "letter": {"y":"Y2", "x":"X2" } } ).count()
0

指定文檔數(shù)組中字段的查詢(xún)條件

如果您不知道數(shù)組中嵌套文檔的索引位置,請(qǐng)使用點(diǎn) ( .) 連接數(shù)組字段的名稱(chēng)。以下示例選擇 number 數(shù)組中 n1 值 至少有一個(gè) 大于或等于 5 的所有文檔:

注: 使用點(diǎn)表示法查詢(xún)時(shí),字段和索引必須位于引號(hào)內(nèi)。

sit_rs1:PRIMARY> db.user.find( { 'number.n1': { $gte: 5 } } )
{ "_id" : ObjectId("64b621ad9be837dc8e997b71"), "name" : "user4", "age" : 45, "letter" : [ { "z" : "Z1", "w" : "W1" }, { "z" : "Z2", "w" : "W2" }, { "z" : "Z3", "w" : "W3" } ], "number" : [ { "n1" : 9, "n2" : 8 }, { "n1" : 2, "n2" : 4 }, { "n1" : 3, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b6e"), "name" : "user1", "age" : 10, "letter" : [ { "x" : "X1", "y" : "Y1" }, { "x" : "X2", "y" : "Y2" }, { "x" : "X3", "y" : "Y3" } ], "number" : [ { "n1" : 2, "n2" : 6 }, { "n1" : 3, "n2" : 3 }, { "n1" : 5, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b72"), "name" : "user5", "age" : 55, "letter" : [ { "z" : "Z1", "u" : "U1" }, { "z" : "Z2", "u" : "U2" }, { "z" : "Z3", "u" : "U3" } ], "number" : [ { "n1" : 7, "n2" : 8 }, { "n1" : 8, "n2" : 4 }, { "n1" : 4, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b73"), "name" : "user6", "age" : 55, "letter" : [ { "t" : "T1", "u" : "U1" }, { "t" : "T2", "u" : "U2" }, { "t" : "T3", "u" : "U3" } ], "number" : [ { "n1" : 5, "n2" : 8 }, { "n1" : 8, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b6f"), "name" : "user2", "age" : 20, "letter" : [ { "V" : "V1", "y" : "Y1" }, { "V" : "V2", "y" : "Y2" }, { "V" : "V3", "y" : "Y3" } ], "number" : [ { "n1" : 1, "n2" : 3 }, { "n1" : 4, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }

你也可以使用索引,為文檔中特定索引或數(shù)組位置的字段指定查詢(xún)條件。該數(shù)組使用從零開(kāi)始的索引。

sit_rs1:PRIMARY> db.user.find( { 'number.0.n1': { $gte: 5 } } )
{ "_id" : ObjectId("64b621ad9be837dc8e997b71"), "name" : "user4", "age" : 45, "letter" : [ { "z" : "Z1", "w" : "W1" }, { "z" : "Z2", "w" : "W2" }, { "z" : "Z3", "w" : "W3" } ], "number" : [ { "n1" : 9, "n2" : 8 }, { "n1" : 2, "n2" : 4 }, { "n1" : 3, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b72"), "name" : "user5", "age" : 55, "letter" : [ { "z" : "Z1", "u" : "U1" }, { "z" : "Z2", "u" : "U2" }, { "z" : "Z3", "u" : "U3" } ], "number" : [ { "n1" : 7, "n2" : 8 }, { "n1" : 8, "n2" : 4 }, { "n1" : 4, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b73"), "name" : "user6", "age" : 55, "letter" : [ { "t" : "T1", "u" : "U1" }, { "t" : "T2", "u" : "U2" }, { "t" : "T3", "u" : "U3" } ], "number" : [ { "n1" : 5, "n2" : 8 }, { "n1" : 8, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }

為文檔數(shù)組指定多個(gè)條件, 當(dāng)對(duì)嵌套在文檔數(shù)組中的多個(gè)字段指定條件時(shí),您可以指定查詢(xún),使得單個(gè)文檔滿(mǎn)足這些條件,或者數(shù)組中的任意文檔組合(包括單個(gè)文檔)滿(mǎn)足條件。

  • 單個(gè)文檔滿(mǎn)足條件

使用 $elemMatch 運(yùn)算符對(duì)一組嵌入文檔指定多個(gè)條件,以便至少一個(gè)嵌入文檔滿(mǎn)足所有指定的條件。注意: 這里是 n1 這個(gè)指段(同一文檔)滿(mǎn)足大于5且小于8,如果數(shù)組存在至少一個(gè)這樣的文檔,則匹配。

# 以下示例查詢(xún)數(shù)組中 number 至少有一個(gè)嵌入文檔, n1 大于5且小于8的字段的文檔:
sit_rs1:PRIMARY> db.user.find( { "number": { $elemMatch: { n1: { $gt: 5, $lt: 8 } } } } )
{ "_id" : ObjectId("64b621ad9be837dc8e997b72"), "name" : "user5", "age" : 55, "letter" : [ { "z" : "Z1", "u" : "U1" }, { "z" : "Z2", "u" : "U2" }, { "z" : "Z3", "u" : "U3" } ], "number" : [ { "n1" : 7, "n2" : 8 }, { "n1" : 8, "n2" : 4 }, { "n1" : 4, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b73"), "name" : "user6", "age" : 55, "letter" : [ { "t" : "T1", "u" : "U1" }, { "t" : "T2", "u" : "U2" }, { "t" : "T3", "u" : "U3" } ], "number" : [ { "n1" : 5, "n2" : 8 }, { "n1" : 8, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b6f"), "name" : "user2", "age" : 20, "letter" : [ { "V" : "V1", "y" : "Y1" }, { "V" : "V2", "y" : "Y2" }, { "V" : "V3", "y" : "Y3" } ], "number" : [ { "n1" : 1, "n2" : 3 }, { "n1" : 4, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }
  • 組合文檔滿(mǎn)足條件

如果數(shù)組字段上的復(fù)合查詢(xún)條件不使用運(yùn)算 $elemMatch符,則查詢(xún)會(huì)選擇數(shù)組中包含滿(mǎn)足條件的任意元素組合的文檔,如下:注意這里是組合滿(mǎn)足。即數(shù)組中如果有兩個(gè)文檔組合滿(mǎn)足條件,即匹配。

sit_rs1:PRIMARY> db.user.find( { "number.n1":  { $gt: 5, $lt: 8 } }  )
{ "_id" : ObjectId("64b621ad9be837dc8e997b71"), "name" : "user4", "age" : 45, "letter" : [ { "z" : "Z1", "w" : "W1" }, { "z" : "Z2", "w" : "W2" }, { "z" : "Z3", "w" : "W3" } ], "number" : [ { "n1" : 9, "n2" : 8 }, { "n1" : 2, "n2" : 4 }, { "n1" : 3, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b72"), "name" : "user5", "age" : 55, "letter" : [ { "z" : "Z1", "u" : "U1" }, { "z" : "Z2", "u" : "U2" }, { "z" : "Z3", "u" : "U3" } ], "number" : [ { "n1" : 7, "n2" : 8 }, { "n1" : 8, "n2" : 4 }, { "n1" : 4, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b73"), "name" : "user6", "age" : 55, "letter" : [ { "t" : "T1", "u" : "U1" }, { "t" : "T2", "u" : "U2" }, { "t" : "T3", "u" : "U3" } ], "number" : [ { "n1" : 5, "n2" : 8 }, { "n1" : 8, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }
{ "_id" : ObjectId("64b621ad9be837dc8e997b6f"), "name" : "user2", "age" : 20, "letter" : [ { "V" : "V1", "y" : "Y1" }, { "V" : "V2", "y" : "Y2" }, { "V" : "V3", "y" : "Y3" } ], "number" : [ { "n1" : 1, "n2" : 3 }, { "n1" : 4, "n2" : 5 }, { "n1" : 7, "n2" : 6 } ] }

到此這篇關(guān)于Mongodb 對(duì)嵌套文檔數(shù)組進(jìn)行查詢(xún)操作的文章就介紹到這了,更多相關(guān)Mongodb嵌套文檔數(shù)組查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MongoDB開(kāi)啟權(quán)限認(rèn)證的方法步驟詳解

    MongoDB開(kāi)啟權(quán)限認(rèn)證的方法步驟詳解

    MongoDB已經(jīng)使用很長(zhǎng)一段時(shí)間了,基于MongoDB的數(shù)據(jù)存儲(chǔ)也一直沒(méi)有使用到權(quán)限訪問(wèn)(MongoDB默認(rèn)設(shè)置為無(wú)權(quán)限訪問(wèn)限制),最近深入學(xué)習(xí)了下,所以下面這篇文章主要給大家介紹了關(guān)于MongoDB開(kāi)啟權(quán)限認(rèn)證的相關(guān)資料,需要的朋友可以參考下。
    2018-02-02
  • 淺析MongoDB 全文檢索

    淺析MongoDB 全文檢索

    這篇文章主要介紹了MongoDB 全文檢索的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的學(xué)習(xí)了解MongoDB,感興趣的朋友可以了解下
    2020-07-07
  • 通用MapReduce程序復(fù)制HBase表數(shù)據(jù)

    通用MapReduce程序復(fù)制HBase表數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了通用MapReduce程序復(fù)制HBase表數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • MongoDB數(shù)據(jù)庫(kù)forEach循環(huán)遍歷用法

    MongoDB數(shù)據(jù)庫(kù)forEach循環(huán)遍歷用法

    這篇文章主要介紹了MongoDB數(shù)據(jù)庫(kù)forEach循環(huán)遍歷用法,需要的朋友可以參考下
    2014-07-07
  • 一次因mongo查詢(xún)不存在字段引發(fā)的事故記錄

    一次因mongo查詢(xún)不存在字段引發(fā)的事故記錄

    這篇文章主要給大家介紹了關(guān)于一次因mongo查詢(xún)不存在字段引發(fā)的事故記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Mongodb文檔和數(shù)組的通配符索引應(yīng)用小結(jié)

    Mongodb文檔和數(shù)組的通配符索引應(yīng)用小結(jié)

    Mongodb的通配符索引,為靈活可變的Mongodb數(shù)據(jù)結(jié)構(gòu)提供了高效的查詢(xún)方法,本文結(jié)合Mongodb官方文檔,詳細(xì)介紹在嵌入式文檔和數(shù)組上,通配符索引的結(jié)構(gòu),感興趣的朋友一起看看吧
    2024-07-07
  • MongoDB入門(mén)教程之細(xì)說(shuō)MongoDB數(shù)據(jù)庫(kù)的增刪查改操作

    MongoDB入門(mén)教程之細(xì)說(shuō)MongoDB數(shù)據(jù)庫(kù)的增刪查改操作

    這篇文章主要介紹了MongoDB入門(mén)教程之細(xì)說(shuō)MongoDB數(shù)據(jù)庫(kù)的增刪查改操作,本文環(huán)境是windows,所以以圖片形式講解,需要的朋友可以參考下
    2014-08-08
  • CentOS系統(tǒng)下MongoDB安裝及配置教程

    CentOS系統(tǒng)下MongoDB安裝及配置教程

    這篇文章主要介紹了CentOS系統(tǒng)下MongoDB安裝及配置教程,本文先是講解了一些準(zhǔn)備工作,然后講解了安裝MongoDB的服務(wù)器端和客戶(hù)端工具的步驟,需要的朋友可以參考下
    2015-01-01
  • Mongodb過(guò)濾器filter選擇要返回的數(shù)組子集操作方法

    Mongodb過(guò)濾器filter選擇要返回的數(shù)組子集操作方法

    Mongodb使用過(guò)濾器 $filter根據(jù)指定條件選擇要返回的數(shù)組子集,這篇文章主要介紹了Mongodb對(duì)嵌套文檔數(shù)組進(jìn)行查詢(xún)操作,需要的朋友可以參考下
    2023-07-07
  • MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作總結(jié)

    MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作總結(jié)

    這篇文章主要介紹了MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作,結(jié)合實(shí)例形式總結(jié)分析了MongoDB數(shù)據(jù)庫(kù)創(chuàng)建、刪除、集合、文檔等基本操作技巧,需要的朋友可以參考下
    2020-06-06

最新評(píng)論