鍍金池/ 問答/ 數(shù)據(jù)庫(kù)問答
陪我終 回答

你都走了ssh隧道代理了,所以連接mongodb的地址應(yīng)該是127.0.0.1

祉小皓 回答

這只是一個(gè)異步流程控制的問題,寫成Promise返回db并使用。而Promise狀態(tài)確定不再更改,也就不會(huì)走你鏈接db的邏輯

糖豆豆 回答

自問自答!

// 模擬前端返回的數(shù)據(jù)
paperForm = {
    name: '試卷名',
    total: 100,
    ....
    questions: [
        {
            name: '問題1',
            answer: 'A',
            type: 'single',
            ...
        },
        {
            name: '問題2',
            answer: 'A',
            type: 'single',
            ...
        },
        ...
    ]
}
exports.savePaper = function (req, res) {
  let paperForm = req.body.paperForm;
  let userName = req.session.userName;

  // console.log(paperForm);
  // console.log(userName);
  if(paperForm == {}){
    res.json({
      status:'5',
      msg: '數(shù)據(jù)不能為空'
    })
  }
  Teacher.findOne({"userName": userName}, (err,doc)=>{
    if (err) {
      res.json({
        status:'1',
        msg: err.message
      })
    } else {
      if (doc) {
        let paperData = {
          name:paperForm.name,
          totalPoints:paperForm.totalPoints,
          time:paperForm.time,
          _teacher: doc._id,
          _questions: [],
          examnum:0
        }
        Paper.create(paperData,function (err1,doc1) {
          if (err1) {
            res.json({
              status:'1',
              msg: err.message
            })
          } else {
            if (doc1) {
              // console.log('doc1 paper:'+doc1._id);
              doc._papers.push(doc1._id); // 教師中添加該試卷
              doc.save(); // 很重要 不save則沒有數(shù)據(jù)
              // console.log('doc teacher'+doc._papers);
              paperForm.questions.forEach(item => {
                item._papers = [];
                item._papers.push(doc1._id);
                item._teacher = doc._id;
              })
              Question.create(paperForm.questions,function (err2,doc2) {
                if (err2) {
                  res.json({
                    status:'1',
                    msg: err.message
                  })
                } else {
                  if (doc2) {
                    // console.log('doc2 ques:'+doc2)
                    doc2.forEach(item => {
                      doc1._questions.push(item._id);
                    })
                    doc1.save(); // 很重要 不save則沒有數(shù)據(jù)
                   res.json({
                      status:'0',
                      msg: 'success'
                    })
                  } else {
                    res.json({
                      status: '2',
                      msg:'沒找到題目'
                    })
                  }
                }
              })
            } else {
              res.json({
                status: '2',
                msg:'沒找到試卷'
              })
            }
          }
        })
      }
      else {
        res.json({
          status: '2',
          login: false,
          msg:'請(qǐng)登錄'
        })
      }
    }
  })
};

這個(gè)是我的實(shí)現(xiàn)方法,這已經(jīng)算是‘回調(diào)地獄’了,有需要可以自己用Promise優(yōu)化。

別瞎鬧 回答

試一下SQLAlchemy的event吧(http://docs.sqlalchemy.org/en...
一個(gè)簡(jiǎn)單的使用例子

import sqlalchemy
from sqlalchemy import event
from models import Wallet

class User(db.Model):
  name = sqlalchemy.column(s.String)

  @staticmethod
  def after_create(mapper, connection, target):
    wallet = Wallet()
    db.session.add(wallet)
    db.session.commit()
    
event.listen(User, 'after_insert', User.after_create)
瘋子范 回答
  1. 不能
  2. 選擇離散性高的字段做索引,索引字段盡量少
The higher the cardinality, the greater the chance that MySQL uses the index when doing joins.
浪婳 回答
在PG中,數(shù)據(jù)是tuple組織的,每個(gè)tuple都是固定的storage layout,即字段存儲(chǔ)的物理順序是固定的,解釋時(shí)是按照pg_attribute中存儲(chǔ)的順序。

PostgreSQL的字段順序不能直接使用SQL進(jìn)行修改。但是可以間接操作,使用臨時(shí)表,將數(shù)據(jù)導(dǎo)入,然后再將數(shù)據(jù)統(tǒng)一插入原有表。

赱丅呿 回答

phpmysql 的交互,我個(gè)人使用的是 pdo。

$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1' , 'root' , '123456');
// 使用預(yù)處理語句
$stmt = $pdo->prepare("select count(*) as `count` from user where username = :username and password = :password");
$stmt->execute([
    ':usename' => $_POST['username'] , 
    ':password' => $_POST['password']
]);
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
$count = $res[0]['count']
// 數(shù)量
var_dump($count);

if ($count > 0) {
    // 驗(yàn)證成功
} else {
    // 驗(yàn)證失敗
}

離人歸 回答
  1. F12瀏覽器調(diào)試模式,查看靜態(tài)資源時(shí)長(zhǎng)
  2. 開啟APP_DEBUG,開啟頁面Trace
  3. 查看其中SQL,在終端執(zhí)行SQL
哎呦喂 回答

你把data打印出來看了就知道了

亮瞎她 回答
  1. 查詢出A表和B表前一百條數(shù)據(jù),組成臨時(shí)表,然后在把臨時(shí)表通過time過濾.
眼雜 回答

不知道你怎么操作的,我是這么操作的,且沒報(bào)錯(cuò),你可以試下:
1/go build -gcflags "-N -l" test.go
2/gdb test
3/(gdb) b test.go:8
4/(gdb) r

其中第3步是main函數(shù)所在的行號(hào)。

離殤 回答

1.
你使用 npm 安裝了 mongodb 卻說不知道這個(gè)中間件叫什么,呃,準(zhǔn)確的說,這個(gè)叫做 driver

npm install mongodb --save-dev

糾正一點(diǎn), --save-dev 表示將 mongodb 添加到 dev 依賴,但事實(shí)上它是開發(fā)依賴,應(yīng)該用 --save

2.

既然知道使用了 npm 安裝了 mongodb,那么直接用 npm + mongodb 作為關(guān)鍵字組合搜索就好了,推薦谷歌搜索。

搜索結(jié)果里找到第一個(gè),一般就是 npm 的官網(wǎng)了。
mongodb

然后按圖索驥找到 doc
collection find

如果上面的你還看不懂,那么很可能是以下幾個(gè)原因

  • 英語不好,看見一堆英文找不到文檔這個(gè)詞,自然找不到官方文檔

  • 不會(huì)用搜索引擎搜技術(shù)問題。技術(shù)問題優(yōu)先用谷歌搜索,提煉一下問題,找到幾個(gè)關(guān)鍵字。

關(guān)于如何搜索技術(shù)問題,我寫了一篇文章,有興趣的可以看看。

心上人 回答

buf.toString()粘出來執(zhí)行一哈再說。

挽青絲 回答

確認(rèn)/usr/local/var/log/mongodb/目錄存在,且啟動(dòng)mongod的用戶有寫的權(quán)限

執(zhí)行以下命令

$ ls -al /usr/local/var/log/mongodb/

應(yīng)有以下類似的輸出

total 56
drwxr-xr-x  3 abc  admin     96 12 25 23:54 .
drwxr-xr-x  7 abc  admin    224 10 23 22:41 ..
-rw-r--r--  1 abc  admin  25444 12 26 20:25 mongo.log
青檸 回答

同樣的邏輯,最好模塊化,要不寫成函數(shù),要不寫成類,我順著 @prolifes 的思路,再往下細(xì)化一下。建議你把上面的函數(shù)的相同部分,再分解一下,分解成幾個(gè)不同的函數(shù),然后在類中進(jìn)行調(diào)用即可。

維她命 回答

下次遇到這種情況,要么找回來,要么下個(gè)新的,在新的里面偷過來

伴謊 回答

MyIsam不支持事務(wù)。myisam的每次的讀寫都會(huì)隱性的加上讀寫鎖,并未出現(xiàn)過鎖死的情況。讀鎖是共享的,而寫鎖是獨(dú)占的,意味一個(gè)session在寫的時(shí)候,另一個(gè)session必須等待

遺莣 回答

外鍵在mysql系統(tǒng)里只是一個(gè)邏輯結(jié)構(gòu)定義,為了性能考慮,mysql會(huì)自動(dòng)為每個(gè)外鍵創(chuàng)建一個(gè)索引結(jié)構(gòu)段,而你定義了兩個(gè)外鍵,其中有一個(gè)已經(jīng)是主鍵或者某個(gè)索引的組成部分,并且滿足最左匹配原則,所以只會(huì)為你創(chuàng)建另外一個(gè)外鍵的索引

司令 回答

文中指的是客戶端的線程池大小。

數(shù)據(jù)庫(kù)服務(wù)器另有不同的估算方法。

久愛她 回答

選兩個(gè)相同的拖動(dòng), 就可以拖出相同日期了.