JSONStoresearchFieldsについて質問があります。
number
searchFieldsキーとして使用し、クエリとしてを使用してWL.JSONStore.find
メソッドでデータを検索しようとする0
と、すべてのデータがヒットします(フィルター処理されません)。
上記のinteger
場合は問題なく動作します。
number
との違いは何integer
ですか?
JSONStoresearchFieldsについて質問があります。
number
searchFieldsキーとして使用し、クエリとしてを使用してWL.JSONStore.find
メソッドでデータを検索しようとする0
と、すべてのデータがヒットします(フィルター処理されません)。
上記のinteger
場合は問題なく動作します。
number
との違いは何integer
ですか?
JSONStoreはSQLiteを使用してデータを永続化します。SQLiteのデータ型についてはこちらをご覧ください。簡単な答えはnumber
、データをとして保存しREAL
、integer
データをとして保存することINTEGER
です。
タイプのnums
1つのsearchFieldで呼び出されるコレクションを作成する場合num
number
var nums = WL.JSONStore.initCollection('nums', {num: 'number'}, {});
いくつかのデータを追加します。
var len = 5;
while (len--) {
nums.add({num: len});
}
find
次に、クエリで呼び出します。{num: 0}
nums.find({num: 0}, {onSuccess: function (res) {
console.log(JSON.stringify(res));
}})
あなたは戻る必要があります:
[{"_id":1,"json":{"num":4}},{"_id":2,"json":{"num":3}},{"_id":3,"json":{"num":2}},{"_id":4,"json":{"num":1}},{"_id":5,"json":{"num":0}}]
保存したすべてのドキュメントが戻ってきたことに注意してください(num = 4、3、2、1、0)。
.sqliteファイルを見ると:
$ cd ~/Library/Application Support/iPhone Simulator/6.1/Applications/[id]/Documents
$ sqlite3 jsonstore.sqlite
(Androidファイルは下にある必要があります/data/data/com.[app-name]/databases/
)
sqlite> .schema
CREATE TABLE nums ( _id INTEGER primary key autoincrement, 'num' REAL, json BLOB, _dirty REAL default 0, _deleted INTEGER default 0, _operation TEXT);
numのデータ型が。であることに注意してくださいREAL
。
検索関数で使用されるのと同じクエリを実行します。
sqlite> SELECT * FROM nums WHERE num LIKE '%0%';
1|4.0|{"num":4}|1363326259.80431|0|add
2|3.0|{"num":3}|1363326259.80748|0|add
3|2.0|{"num":2}|1363326259.81|0|add
4|1.0|{"num":1}|1363326259.81289|0|add
5|0.0|{"num":0}|1363326259.81519|0|add
通知4
はとして保存され4.0
、JSONStoreのクエリは常にを使用します。aがLIKE
付いているnum0
はクエリと一致します。
integer
代わりに使用する場合:
var nums = WL.JSONStore.initCollection('nums', {num: 'integer'}, {});
返品の検索:
[{"_id":5,"json":{"num":0}}]
schema
は、numのINTEGER
データ型が次のことを示しています。
sqlite> .schema
CREATE TABLE nums ( _id INTEGER primary key autoincrement, 'num' INTEGER, json BLOB, _dirty REAL default 0, _deleted INTEGER default 0, _operation TEXT);
sqlite> SELECT * FROM nums WHERE num LIKE '%0%';
5|0|{"num":0}|1363326923.44466|0|add
簡潔にするために、一部のコールバックonSuccess
とすべてのコールバックをスキップしました。onFailure
JSON 数値と整数の実際の違いは次のとおりです。
defining {age: 'number'} indexes 1 as 1.0,
while defining{age: 'integer'} indexes 1 as 1.
ご理解いただければ幸いです