鍍金池/ 問答/ 數(shù)據(jù)庫問答
舊言 回答

這是服務已經(jīng)起來了,等待你的客戶端連接,連接到mongod服務的.。。。。。。

再說你可以用在打開一個cmdmongo連接試試啊,還等。。。。。。。。

孤巷 回答

試試把Schema = mongoose.Schema;換成 const { Schema } = mongoose;

不歸路 回答

沒有,studio 3T有。

絯孑氣 回答

1.update語句有種配置方式(useAffectedRows=true)可以返回影響的記錄數(shù)
2.如果步驟1不好用,能不能以再次查詢的方式進行驗證

沒用過nodejs,不太確定你具體的使用方式

老梗 回答

安裝文檔是否都有照做呢?特別是

Add the following line to your php.ini file:
extension=mongodb.so

憶當年 回答

一次查出?這個可以加個派生列,但是沒意義啊,你是想看各部門人數(shù)占比嗎?

查部門人數(shù)(如果不行給列名加引號試試,語法應該沒錯):
SELECT 部門名稱, COUNT(*) 部門人數(shù)
FROM table
GROUP BY 部門名稱;

查總?cè)藬?shù):
SELECT COUNT(*)
from table

悶騷型 回答

停掉其他服務,還有命令啟動命令是‘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)sql
for 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