2015-01-05 5 views
6

मुझे बुकशेल्फ़ के साथ कोई समस्या है, मैं कॉलम जेसन प्रकार पर क्वेरी का उपयोग करना चाहता हूं मेरी तालिका में कॉलम 'डेटा' प्रकार जेसन है, मैं इस कॉलम 'टीम' में सभी तत्व प्राप्त करना चाहता हूं = 'पीएसजी'बुकशेल्फ़.जेएस जहां जेसन कॉलम पोस्टग्रेस्क्ल

मैं परीक्षण:

collection.query('whereRaw', "data->'team'->>'PSG'"); 

मैं यह त्रुटि

"argument of WHERE must be type boolean, not type text"

या मैं

का परीक्षण किया है
collection.query('where', "data", "#>", "'{team, PSG}'"); 

मैं यह त्रुटि

"The operator \"#>\" is not permitted"

मुझे लगता है कि के साथ एक रिपोर्ट है कि है https://github.com/tgriesser/bookshelf/issues/550

उत्तर

4

लघु जवाब:

collection.query('where', 'data', '@>', '{"team": "PSG"}'); 

स्पष्टीकरण:

आप एक तालिका foos है, जहां एक तत्व foo

------------------------ 
| id | attr    | 
------------------------ 
| 0 |{ "bar": "fooBar"} | 
------------------------ 
| 1 |{ "bar": "fooFoo"} | 
------------------------ 
कि जैसा होगा के लिए

कच्चे क्वेरी है कहो।

select * from "foos" where "attr" @> '{"bar":"fooBar"}'; 

अब बुकशेल्फ़ में यदि आपके पास मॉडल फू है जो टेबल का प्रतिनिधित्व करता है तो यह क्वेरी जैसा होना चाहिए।

Foo.where('attr', '@>', '{"bar":"fooBar"}').fetch().then(function(rows){}); 

अब आपके मामले के लिए यह होना चाहिए

collection.query('where', 'data', '@>', '{"team": "PSG"}'); 

उम्मीद है कि ज़्लैटन मंजूरी जैसे कि यह।

+0

मैं एक ही क्वेरी का उपयोग कर रहा हूं, लेकिन अभी भी त्रुटि प्राप्त कर रहा हूं, 'अनचाहे अस्वीकृति त्रुटि: "foo" चुनें। * "Attoo" @> $ 1 सीमा $ 2 - ऑपरेटर मौजूद नहीं है: json @> अज्ञात '। – Vasanth

+0

क्या आप अपने knex क्वेरी को डीबग फ्लैग के साथ चला सकते हैं और अपनी सटीक क्वेरी पोस्ट कर सकते हैं? –

संबंधित मुद्दे