MongoDB 內嵌文件

2021-07-31 21:15:30 字數 1530 閱讀 7036

mongodb是文件型的資料庫系統,doc是mongodb的資料單位,每個doc相當於關係型資料庫的資料行(row),doc和row的區別在於field的原子性:row中的column是不和分割的原子物件,而doc中的field可以是原子物件,也可以是內嵌doc(embedded doc),陣列等資料型別。內嵌doc中所有field的key不允許重複。

例如以下doc,contact 欄位是內嵌doc。

onedoc=

}--insert a doc

db.foo.insert(onedoc)

一,查詢內嵌文件

1,如果內嵌doc存在field滿足query filter,那麼將doc返回。在引用內嵌doc中的field時,使用 dot notation,格式是:embedded_doc.field:value,如果內嵌doc的field也是內嵌文件,依次類推,embedded_doc1.embedded_doc2.field:value。

示例,查詢contact 欄位中phone是123的所有doc。

db.foo.find()
2,限制返回的doc的field

示例,使用find的第二個引數projection doc,只返回兩個field:name 欄位和內嵌doc的email欄位。通過dot notation,將內嵌doc中的某些字段返回,格式是:embedded_doc.field:1,表示返回該欄位,embedded_doc.field:0,表示不返回該欄位。

db.foo.find(,)
二,修改內嵌doc

upsert 選項非常有用,如果當前的doc中不存在內嵌文件,通過$set modifier 來增加;如果當前的doc中存在內嵌文件,通過$set modifier來修改內嵌文件的值。

1,修改doc,增加內嵌doc

示例,增加address欄位,這是內嵌doc

db.foo.updatemany(

,}},

)

2,修改內嵌doc中的字段

示例,修改內嵌doc中province 和 city 欄位的內容,全部修改為"shanghai"

db.foo.updatemany(

,}},

)

三,刪除doc中的內嵌doc

$unset modifier能夠刪除doc中的字段,使用格式:},將刪除的字段放在$unset文件中。

1,如果要刪除內嵌doc中的field或陣列中的元素,可以使用dot notation。

示例,刪除address內嵌doc中的province 字段

db.foo.updatemany(,},

)

2,如果不使用dot notation,那麼刪除的將是整個內嵌doc

示例,在$unset modifier中,使用address 內嵌doc 格式,那麼將刪除address field。

db.foo.updatemany(

,}},

)

引用doc:

$set

$unset

MongoDB 內嵌文件

mongodb是文件型的資料庫系統,doc是mongodb的資料單位,每個doc相當於關係型資料庫的資料行 row doc和row的區別在於field的原子性 row中的column是不和分割的原子物件,而doc中的field可以是原子物件,也可以是內嵌doc embedded doc 陣列等資料型...

morphia查詢mongodb內嵌文件

mongodb中儲存的文件格式如下,實現查詢fromdata下did和dvid為指定值的資料 rid 9eec7fbe8a6f4d17b02756fdbcefcc41 rname 測試場景1 username zhaoptest enable 1,fromdata todata 使用db.devic...

mongodb中根據內嵌文件中的條件查詢

在寫報使用者訂單報表的時候遇到了乙個mongodb的查詢問題,上網上也找了下資料,在這裡記錄一下 根據訂單文件中的內嵌文件裡的資料進行查詢資料庫 prodcatid 02001 txntype 30 prodid zdsjyz0622 03 ordertime 2017 06 23 17 50 20...