鍍金池/ 問(wèn)答/ 數(shù)據(jù)庫(kù)問(wèn)答
心悲涼 回答

后來(lái)通過(guò)其他渠道解決了該問(wèn)題。
通過(guò)在設(shè)置文件中添加 bind_ip=0.0.0.0,再重啟mongodb,就解決了

毀與悔 回答

題主沒(méi)發(fā)現(xiàn)你的 is_read 的值全是1嗎,感覺(jué)是 OR、AND的優(yōu)先級(jí)問(wèn)題,我不太記得 MySQL 的WHERE能不能通過(guò)加括號(hào)來(lái)改各個(gè)條件語(yǔ)句的優(yōu)先級(jí)了,你可以試試。

喵小咪 回答

INSERT INTO position (name, departmentId) values ('開面料', 1);
少了一個(gè)INTO關(guān)鍵字

涼心人 回答

你的parent_id 字段和_id字段的數(shù)據(jù)格式應(yīng)該一致的,這樣設(shè)計(jì)才合理:

以下回答是在你的parent_id 字段和_id字段的數(shù)據(jù)格一致的情況下:
用聚合函數(shù)aggregate

db.getCollection('test').aggregate([
    {$match:{"parent_id" :"0"}},
    {$lookup:{from:'test',localField:'_id',foreignField:'parent_id',as:'items'}}
])
情已空 回答

jackson 字段動(dòng)態(tài)過(guò)濾

https://github.com/bohnman/squiggly-filter-jackson
https://github.com/narusas/SpringMvcJacksonFilter
https://github.com/shihyuho/jackson-dynamic-filter

  1. 使用AOP;自己定義注解,然后在返回的時(shí)候加上需要過(guò)濾的字段.

這是我的工具類 
https://github.com/yujunhao8831/spring-boot-start-current/blob/master/aidijing-common/src/main/java/com/aidijing/common/util/JsonUtils.java
  1. 實(shí)現(xiàn) ResponseBodyAdvice<T> 接口,如果這樣,那么就需要使用統(tǒng)一的返回值類型,把之前的返回值包裝起來(lái).
    這樣在Spring Response 寫出去之前,你可以對(duì)這些數(shù)據(jù)進(jìn)行處理,還是使用jackson的過(guò)濾特性.
    我之前就是這樣做的, https://github.com/yujunhao88... 你可以參考下

  2. 返回之前就立馬進(jìn)行過(guò)濾.
    我之后準(zhǔn)備采用這個(gè), https://github.com/yujunhao88...
    你可以參考下,不過(guò)這不是最終的,還在完善中

舊顏 回答

直接全部替換唄,何必這么麻煩。。。

或者:用第三方的唯一id來(lái)判斷

臭榴蓮 回答

你這是scrapy框架嗎?這是有優(yōu)先級(jí),越小越優(yōu)先。

朕略傻 回答

數(shù)據(jù)庫(kù)原生的話字符串是沒(méi)有單增這一說(shuō)法的吧,你可以在應(yīng)用層做,比如:


SELECT CONCAT("KZ",id) as id from table1;
久礙你 回答

一個(gè)基礎(chǔ)字段的主表

一個(gè)自然人的表 有個(gè)ren_id
一個(gè)法律實(shí)體的表 有個(gè) fa_id

然后主表最后關(guān)聯(lián)時(shí)就
type = ren | fa
link_id = *

根據(jù)type去讀對(duì)應(yīng)表的link_id

誮惜顏 回答

我理解下需求如下:

  1. 查詢只按準(zhǔn)考證號(hào)查詢;
  2. 準(zhǔn)考證是唯一的;
  3. 每次的返回結(jié)果都需要返回總成績(jī)和名次;
  4. 成績(jī)變化的頻度不高,時(shí)間越往后頻度越低;

實(shí)現(xiàn)思路:

  • 準(zhǔn)考證號(hào)建立唯一索引,這樣查詢起來(lái)非??欤撩爰?jí)別。
  • 單獨(dú)寫一個(gè)服務(wù),根據(jù)記錄的總成績(jī)算出來(lái)其所在名次。這種查詢效率最高。維護(hù)比較麻煩些。還要考慮成績(jī)變了,名次沒(méi)變這種不同步的情況。
  • 或者 每次都動(dòng)態(tài)查詢名次,這種實(shí)現(xiàn)簡(jiǎn)單、效率也還行(對(duì)于700W數(shù)據(jù)來(lái)說(shuō))。 不會(huì)存在成績(jī)和名次同步問(wèn)題。

間隙鎖是為了防止幻讀
MySQL InnoDB 鎖——官方文檔
https://segmentfault.com/a/11...

冷眸 回答

為什么要用16進(jìn)制呢,整數(shù)類型肯定是最適合用作主鍵的,還可以設(shè)為自增;
千萬(wàn)別用varchar類型的主鍵,insert和一些select會(huì)變慢。

亮瞎她 回答

每個(gè)docker容器都有自己的ip,一般docker的ip是以172.17.0.x這樣的形式分配的。
你的宿主機(jī)也是有ip地址的。你在docker里面寫127.0.0.1是有問(wèn)題的,那只會(huì)指向你自己的docker本機(jī)。
正確的做法是,寫成宿主機(jī)的ip地址就可以了。

歡迎加Q群交流討論Java技術(shù):696883318

使用python的collections

import json
from collections import defaultdict


def main():
    ret = defaultdict(list)
    data = [
     {'_id': '5abb4f9ca7e2c54c757b3e48',
      'amount': 8400,
      'buyerEmail': 'otzYzwMh24edWk8NxSJOqCSZREe0',
      'from': 'weixin',
      'orderid': '2018032816173212079',
      'real': 8400,
      'status': 1,
      'tradeNo': '4200000099201803287230332578',
      'uid': '5abb36051a62067bf7e30178' # 需要把ObjectId處理成字符串
    },
    {'_id': '5b6699f6df03ec3294d7c0a4',
      'amount': 100,
      'buyerEmail': 'otzYzwC3YwRdu7QrWLXqS3VRJybI',
      'from': 'weixin',
      'orderid': '2018080514322245193',
      'real': 100,
      'status': 1,
      'tradeNo': '4200000148201808052403940202',
      'uid': '5a5738411a62061972e128cb' # 需要把ObjectId處理成字符串
    },
    {'_id': '5b6699f6df03ec3294d7c0a4',
      'amount': 200,
      'buyerEmail': 'otzYzwC3YwRdu7QrWLXqS3VRJybI',
      'from': 'weixin',
      'orderid': '2018080514322245193',
      'real': 200,
      'status': 1,
      'tradeNo': '4200000148201808052403940202',
      'uid': '5a5738411a62061972e128cb' # 需要把ObjectId處理成字符串
    },
    ]
    
    for d in data:
        ret[d.get('uid')].append(d)
        
    print(json.dumps(ret, indent=2))
if __name__ == '__main__':
    main()
    

鎖有沒(méi)有嵌套?是不是鎖到同一個(gè)變量了?
是不是在第二步就死鎖了?

涼薄 回答

不用回退版本,本人親測(cè)高版本連接操作數(shù)據(jù)庫(kù) 代碼如下

// 3.0 以上 高版本語(yǔ)法

const express = require('express');
const router = express.Router();
const mongoClient = require('mongodb').MongoClient;
const assert = require('assert');
mongoClient.connect("數(shù)據(jù)庫(kù)地址", function(err, client) { assert.equal(null, err);

// admin 為 數(shù)據(jù)庫(kù)名稱;
const db = client.db("admin");
// PASS 為 數(shù)據(jù)庫(kù)里面的某一個(gè)集合;
const pass = db.collection('PASS');

pass.find({}).toArray(function(err, docs) {

assert.equal(err, null);

console.log(docs);

});

});

module.exports = router;

莓森 回答

連接方式有問(wèn)題,應(yīng)該使用mongo --host 192.168.1.102 --port 27017 后面不知不覺(jué)就好了. 尷尬

亮瞎她 回答

這個(gè)問(wèn)題被我發(fā)現(xiàn)了,因?yàn)槲业娜掌诶锩嬗幸粋€(gè)日期是 9999-12-31,然后在這個(gè)日期上面 + 1了,加一個(gè)前置條件:date <> date'9999-12-31'

可以參考下spring事務(wù)的傳播屬性來(lái)解決這個(gè)問(wèn)題, for循環(huán)內(nèi)調(diào)用一個(gè)新方法處理這一條數(shù)據(jù),并在方法上標(biāo)注 @Transactional(propagation = Propagation.REQUIRES_NEW) 用來(lái)新開啟一個(gè)事務(wù)。