[MongoiDB][Java] MongoCollection::updateOne で更新ができずハマった・・・

MongoDBを使用した開発をしていて、データを更新するコーディングしてたら、
com.mongodb.client.MongoCollection::updateOne で update処理動かしてもデータが更新されない・・・

第一引数に更新条件のFiIterを設定して、第二引数に更新データをセット。
なんども、更新用データを確認したが反映されない。。。
試しにfindすると、条件で抽出できているのでFilterには問題なさそう。

エラーも出てない。。。

結局は、更新用データに org.bson.Document を使用していたからみらい。
なので、”replaceOne(Bson filter, TDocument replacement)” のほうを使用して無事更新することができました。。

updateOne(Bson filter, Bson update)は更新データの型はBsonでした。
Documentでも大丈夫かと思いましたが、ダメだったみたいです・・・

[参考]
APIリファレンス
http://api.mongodb.com/java/current/com/mongodb/client/MongoCollection.html

[Oracle] NULLの計算

NULLの比較について」以前に記載したが、
今回は、計算でNULLが入った場合どうなるか検証。

今回使用したテーブル(TEST_TBL)のデータは以下。


SUMした場合どうなるか??

select TEST, SUM(NUM), SUM(NUM2)
from TEST_TBL
group by A_CODE;

実行結果は、どうやらNULLは無視されているようです。
SUM(NUM2)はNULLを除いた「200+220=400」が出力されています。



ちなみに、以下のSQLのように計算した場合、
NULLの計算はNULLになるようです。

select 100 + null, 100 + 200
from dual;

実行結果は、「100 + null」はNULLになり、「100 + 200」は300になりました。


数値のカラムに"NOT NULL"制約がついてなかったりして、
NULLになる可能性がある場合、計算は要注意ですな。


[Oracle] 主要なデータ型

カラムによく指定される型を紹介。

CHAR(n)
文字列型(固定)です。
カッコでサイズを指定します。固定長なので、サイズを満たない
文字列を挿入した場合は、空白が入ります。

VARCHAR2(n)
文字列型(可変)です。
カッコで最大サイズを指定します。可変なので、サイズを満たない
文字列を指定しても空白は入りません。

NUMBER(n1,n2)
数値型です。カッコで制度(全体桁数と少数桁数)を指定します。
n1:小数を含めた全体の桁数
n2:小数の桁数


DATE
日付型、その名の通り日時を格納するカラムです。
データの登録日や更新日などによく使用します。

※ CHARとVARCHAR2を比較するとき、CHARには空白が入ることを
  考慮しないと、予期せぬ比較結果となることがあるので注意。
  CHAR側の文字列をRTRIMを使用して右側の空白を削除して
  比較するなど検討したほうがいい。




[SQL] NULLの比較について

以下のようなテーブル(TEST_TBL)があるとします。



で、このテーブルの 'A_CODE' が空(NULL)のデータを
抽出したいとします。

SELECT * FROM TEST_TBL
WHERE A_CODE = NULL

このように "= NULL" で比較するのはNG。
結果は1件も抽出されません。

NULLはイコールで比較できないんですね。


ということで、以下のように "IS NULL" を使います。

SELECT * FROM TEST_TBL
WHERE A_CODE IS NULL



ちゃんとNULLのレコードが抽出できました。



ちなみに、以下の方法で "=" を使用してNULLのものを
抽出できそうですが、問題がちらほらとあります。

SELECT * FROM TEST_TBL
WHERE NVL(A_CODE, 'NULL') = 'NULL'

問題点は、もし "A_CODE" に 'NULL' という文字列の
データが入っていたら、抽出されてしまう。
あとは、WHERE句でNVL関数を使用してしまっているため、
インデックスは有効にならず、全表走査してしまうので
パフォーマンスが悪くなる。


ということで、やっぱり "IS NULL" での判定がいいのですな。










[SQL] 集計関数内にDISTINCT

重複(同一)するレコードを削除して抽出するDISTINCT。

SELECTのすぐ後ろに記載することで、同一レコードを排除することが
できるが、このDISTINCは集計関数のパラメータ部分にも
指定することができる。

たとえば、
COUNT(DISTINCT colmun_name)
みたいに指定できる。

SELECT COUNT(DISTINC DUMMY)
FROM
(
SELECT DUMMY FROM DUAL
UNION ALL
SELECT DUMMY FROM DUAL
)

結果、
DUMMY
-------------
1


DISTINCTなしの場合、

SELECT COUNT(DUMMY)
FROM
(
SELECT DUMMY FROM DUAL
UNION ALL
SELECT DUMMY FROM DUAL
)

結果、
DUMMY
-------------
2


プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter