這是服務已經(jīng)起來了,等待你的客戶端連接,連接到mongod
服務的.。。。。。。
再說你可以用在打開一個cmd
用mongo
連接試試啊,還等。。。。。。。。
試試把Schema = mongoose.Schema;換成 const { Schema } = mongoose;
沒有,studio 3T有。
1.update語句有種配置方式(useAffectedRows=true
)可以返回影響的記錄數(shù)
2.如果步驟1不好用,能不能以再次查詢的方式進行驗證
沒用過nodejs,不太確定你具體的使用方式
一次查出?這個可以加個派生列,但是沒意義啊,你是想看各部門人數(shù)占比嗎?
查部門人數(shù)(如果不行給列名加引號試試,語法應該沒錯):
SELECT 部門名稱, COUNT(*) 部門人數(shù)
FROM table
GROUP BY 部門名稱;
查總?cè)藬?shù):
SELECT COUNT(*)
from table
比如 dbeaver, https://dbeaver.io/ , 新建 "ER Diagram" 便可生成表關(guān)系圖。
停掉其他服務,還有命令啟動命令是‘mongo’ 打錯了;
在函數(shù)體(def top():
)中再定義函數(shù) def xxx
會不會產(chǎn)生一個 function 實例?答案是會。從翻譯成opcode的結(jié)果來看,函數(shù)體中會執(zhí)行 MAKE_FUNCITON
指令,這個指定是會申請一個內(nèi)存空間,并設置其運行的堆棧信息和變量空間等,也就是相當于 new
了一個實例。每次調(diào)用 top()
函數(shù),因為該函數(shù)里定義了 def xxx
,所以依然會執(zhí)行 MAKE_FUNCITON
指令,也就是說,每次調(diào)用了 top ,里面的 xxx = new Funciton(),都會是不同的函數(shù)對象。
題主中提到的 __get__()
是特殊的內(nèi)置方法,如果你 print(type(top.__get__))
就能看到它并不是函數(shù)的實例,而是 <class 'method-wrapper'>
。想在函數(shù)內(nèi)定義 __get__()
方法來覆蓋應該是行不通的,也就不存在發(fā)生遞歸定義的問題了。
這問題感覺問得挺好的,怎么都沒什么人來討論一下呢。
select name from
student2 where subject = "語文" and score in
(select min(score) from student2 where name != "李四");
t_forum
,這個表應該是保存論壇數(shù)據(jù),(論壇id,論壇名稱,論壇描述信息);t_topic
,這個表應該是保存話題數(shù)據(jù),每一個話題都和一個論壇相關(guān),(話題id,關(guān)聯(lián)論壇id,話題名稱,發(fā)布該話題用戶id,發(fā)布時間,關(guān)注用戶數(shù),回復數(shù)...);t_post
,這個應該就是帖子了(帖子id,關(guān)聯(lián)話題id,發(fā)布用戶id,帖子內(nèi)容,發(fā)布時間...);
大概應該是這樣的...
mongod 是開啟數(shù)據(jù)庫進程 并不是 mongo, 實際已經(jīng)啟動了數(shù)據(jù)庫, 你只需要再打開一個 terminal(終端) 然后輸入 mongo 就可以了.
mongo 是 mongodb 管理工具, mongod 是 mongodb 數(shù)據(jù)庫進程.
不太明白PHP的做法,如果在Java內(nèi) 可以使用Mybatis中的ResultMap 組成一個聯(lián)合內(nèi)容的Bean類實現(xiàn)
確保字段唯一當然可以不用添加額外條件,添加AND
條件的目的就是為了精確得到最終結(jié)果
建議這種問題自己去做做測試,找不同的引擎使用不同的索引驗證一下,聚集索引帶來的更新索引性能犧牲根本可以忽略,甚至合適的聚集索引反而會提高更新插入性能,mysql或者其他類型的DB可以給你很多種選擇。
數(shù)據(jù)提取出來后,這就是純統(tǒng)計算法問題了,跟是否前后端無關(guān),當然實現(xiàn)起來也是比較簡單
const list = [
{"id": 1, "name": "one", "tags": ["a", "c", "e"]},
{"id": 2, "name": "two", "tags": ["e"]},
{"id": 3, "name": "three", "tags": ["d", "e"]},
{"id": 4, "name": "four", "tags": ["g", "c", "e", "h"]},
{"id": 5, "name": "five", "tags": ["a", "c", "d"]}
];
const result = {
length: 0 //不同的標簽類型個數(shù)
};
list.forEach(item => {
item.tags.forEach(tag => {
if (!result[tag]) {
result[tag] = {
name: tag, //標簽名
list: [] //包含含有此標簽的id 數(shù)組length就是此標簽下的條目數(shù)
};
result.length += 1;
}
result[tag].list.push(item.id);
})
});
console.log(result)
其實這大部分是一個操作系統(tǒng)原理的問題。操作系統(tǒng)在讀取文件時會把文件內(nèi)容放到空閑內(nèi)存中,這樣下次再有程序嘗試讀取同樣的文件內(nèi)容的時候,就可以直接從內(nèi)存中給而不用讀磁盤,從而大幅度提高讀取速度。這個緩存就是文件系統(tǒng)緩存。
其實很容易理解:這些內(nèi)存如果沒有人用,空著也是浪費,為什么不緩存一點東西在里面呢?不管緩存什么,只要命中一次就賺到一次。至于怎么怎么賺更多,那就要看你怎么選擇在有限的內(nèi)存空間中緩存的什么內(nèi)容,怎么能讓緩存的內(nèi)容被更多地命中。這部分內(nèi)容跟問題無關(guān),不細說了,有興趣可以看看操作系統(tǒng)原理。
回到你的問題,當你重啟了MongoDB實例時,MongoDB占用的內(nèi)存當然已經(jīng)都釋放掉了。但是無論是數(shù)據(jù)還是索引,其實都還緩存在文件系統(tǒng)緩存中,因為它們都來自于數(shù)據(jù)文件和索引文件(前提是沒有別人要使用這些內(nèi)存)。索引的使用是按需加載,這點基本上從邏輯推理就可以猜出來:假設你的10GB的索引,難道第一次讀取的時候就要等10GB索引加載到內(nèi)存中?假如索引容量比內(nèi)存要大呢?所以一次性加載全部索引顯然是不合理的。即使是一個索引,也是按需部分加載而不是全部。所以你需要用到的只是這1GB中的很小一部分。記住索引的時間復雜度是log2(n),要從1億數(shù)據(jù)中找出需要的一條,最壞的情況下只需要查詢27次比較,當然是瞬間就出來了。
sqlalchemy把所有內(nèi)容查詢出來后,顯示明細,確實是還需要從數(shù)據(jù)庫中一條一條的查詢出來。
只不過這個查詢不是從物理db中查詢,而是從虛擬內(nèi)存db中查詢。
(注:以下說法均為個人從日常實踐及對sqlalchemy的理解中得出的,官方具體怎么樣沒有實際佐證)
create_engine時會調(diào)用create_all()方法,這時將會在內(nèi)存中創(chuàng)建一個虛擬數(shù)據(jù)庫表。
查詢操作會將數(shù)據(jù)庫中的數(shù)據(jù)加載至內(nèi)存,調(diào)用明細時會對內(nèi)存中的表進行查詢操作。
# 1. 類似于下面的這種操作是不會觸發(fā)物理db的相關(guān)操作的,只是生成一段用于在物理db中執(zhí)行的sql
query_str = Model.query.filter(...).order_by(...).with_entities(...)
# 2. query_str執(zhí)行g(shù)et()、all()、first()、one_or_none()等操作時,才會在鏈接物理db并執(zhí)行操作。
# 3. sqlalchemy會將返回結(jié)果保存至內(nèi)存中,最為緩存,供用戶查詢相關(guān)明細。
# 4. 至于查詢明細的方式,本質(zhì)上估計類似于dict.get(key)這種,具體的要看sqlalchemy以什么數(shù)據(jù)結(jié)構(gòu)
# 在內(nèi)存中保存查詢信息了,個人未關(guān)注過
# 5. db.commit()操作會觸發(fā)類似flush()的操作,這時會將緩存中的信息清空。例:
# 會在物理db中執(zhí)行select * from model where id = 1;
result = Model.query.get(1)
# 內(nèi)存中去查詢name,不會涉及到物理db
print result.name
# 內(nèi)存清空
db.commit()
# 兩步操作,①select * from model where id = 1;②從內(nèi)存中去拿name
print result.name
# 注:for循環(huán)等遍歷操作會默認觸發(fā)all()方法,例:# 生成sql,select * from model;但未與物理db有相關(guān)交互。query = Model.query# 等價于 for res in query.all(),在物理db中執(zhí)行相關(guān)sqlfor res in query: # 從內(nèi)存中查詢id print res.id
# 剛上邊那段瞎說了,請忽略,下面為更正信息
# 生成sql,select * from model;但未與物理db有相關(guān)交互。
# query現(xiàn)在為一個str,及query = 'select * from model'
query = Model.query
# 等價于 for res in query.all(),在物理db中執(zhí)行相關(guān)sql
# 現(xiàn)假設query中有三個結(jié)果[res1, res2, res3]
# 執(zhí)行完后query為查詢結(jié)果集合,query=[res1, res2, res3]
for res in query:
# 從內(nèi)存中查詢id
print res.id
# 清空緩存,但[res1, res2, res3]對象是保留的,及query=[res1, res2, res3]
db.commit()
# 等價于 for res in [res1, res2, res3]:
for res in query:
# 兩部操作:①select * from model where id = res.id,從內(nèi)存中查詢id
# 及commit后res1為detached狀態(tài),res.id后為attached狀態(tài)
print res.id
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務機構(gòu),發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。