diff options
author | Eliot Horowitz <eliot@10gen.com> | 2009-08-06 16:15:25 -0400 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2009-08-06 16:15:25 -0400 |
commit | f6deb4d4df07386610c1a7fc230377e56a63472e (patch) | |
tree | 7fb14e540290ef9517847432f4a389deb8373311 /jstests/nin.js | |
parent | 3567de373bb7ff6afb58251e6dfb5e334f7d87d9 (diff) | |
download | mongo-f6deb4d4df07386610c1a7fc230377e56a63472e.tar.gz |
update $nin test
Diffstat (limited to 'jstests/nin.js')
-rw-r--r-- | jstests/nin.js | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/jstests/nin.js b/jstests/nin.js index cb69bab3bdb..4afd34486b9 100644 --- a/jstests/nin.js +++ b/jstests/nin.js @@ -1,7 +1,18 @@ t = db.jstests_nin; t.drop(); -doTest = function() { +function checkEqual( name , key , value ){ + var o = {}; + o[key] = { $in : [ value ] }; + var i = t.find( o ).count(); + o[key] = { $nin : [ value ] }; + var n = t.find( o ).count(); + + assert.eq( t.find().count() , i + n , + "checkEqual " + name + " $in + $nin != total | " + i + " + " + n + " != " + t.find().count() ); +} + +doTest = function( n ) { t.save( { a:[ 1,2,3 ] } ); t.save( { a:[ 1,2,4 ] } ); @@ -9,33 +20,38 @@ doTest = function() { t.save( { a:[ 1,8,6 ] } ); t.save( { a:[ 1,9,7 ] } ); - assert.eq( 5, t.find( { a: { $nin: [ 10 ] } } ).count() ); - assert.eq( 0, t.find( { a: { $ne: 1 } } ).count() ); - assert.eq( 0, t.find( { a: { $nin: [ 1 ] } } ).count() ); - assert.eq( 0, t.find( { a: { $nin: [ 1, 2 ] } } ).count() ); - assert.eq( 3, t.find( { a: { $nin: [ 2 ] } } ).count() ); - assert.eq( 3, t.find( { a: { $nin: [ 8 ] } } ).count() ); - assert.eq( 4, t.find( { a: { $nin: [ 9 ] } } ).count() ); - assert.eq( 4, t.find( { a: { $nin: [ 3 ] } } ).count() ); - assert.eq( 3, t.find( { a: { $nin: [ 2, 3 ] } } ).count() ); + assert.eq( 5, t.find( { a: { $nin: [ 10 ] } } ).count() , n + " A" ); + assert.eq( 0, t.find( { a: { $ne: 1 } } ).count() , n + " B" ); + assert.eq( 0, t.find( { a: { $nin: [ 1 ] } } ).count() , n + " C" ); + assert.eq( 0, t.find( { a: { $nin: [ 1, 2 ] } } ).count() , n + " D" ); + assert.eq( 3, t.find( { a: { $nin: [ 2 ] } } ).count() , n + " E" ); + assert.eq( 3, t.find( { a: { $nin: [ 8 ] } } ).count() , n + " F" ); + assert.eq( 4, t.find( { a: { $nin: [ 9 ] } } ).count() , n + " G" ); + assert.eq( 4, t.find( { a: { $nin: [ 3 ] } } ).count() , n + " H" ); + assert.eq( 3, t.find( { a: { $nin: [ 2, 3 ] } } ).count() , n + " I" ); + checkEqual( n + " A" , "a" , 5 ); + t.save( { a: [ 2, 2 ] } ); - assert.eq( 3, t.find( { a: { $nin: [ 2, 2 ] } } ).count() ); + assert.eq( 3, t.find( { a: { $nin: [ 2, 2 ] } } ).count() , n + " J" ); t.save( { a: [ [ 2 ] ] } ); - assert.eq( 4, t.find( { a: { $nin: [ 2 ] } } ).count() ); + assert.eq( 4, t.find( { a: { $nin: [ 2 ] } } ).count() , n + " K" ); t.save( { a: [ { b: [ 10, 11 ] }, 11 ] } ); - assert.eq( 0, t.find( { 'a.b': { $nin: [ 10 ] } } ).count() ); - assert.eq( 1, t.find( { 'a.b': { $nin: [ [ 10, 11 ] ] } } ).count() ); - assert.eq( 7, t.find( { a: { $nin: [ 11 ] } } ).count() ); + checkEqual( n + " B" , "a" , 5 ); + checkEqual( n + " C" , "a.b" , 5 ); + + assert.eq( 7, t.find( { 'a.b': { $nin: [ 10 ] } } ).count() , n + " L" ); + assert.eq( 8, t.find( { 'a.b': { $nin: [ [ 10, 11 ] ] } } ).count() , n + " M" ); + assert.eq( 7, t.find( { a: { $nin: [ 11 ] } } ).count() , n + " N" ); t.save( { a: { b: [ 20, 30 ] } } ); - assert.eq( 1, t.find( { 'a.b': { $all: [ 20 ] } } ).count() ); - assert.eq( 1, t.find( { 'a.b': { $all: [ 20, 30 ] } } ).count() ); + assert.eq( 1, t.find( { 'a.b': { $all: [ 20 ] } } ).count() , n + " O" ); + assert.eq( 1, t.find( { 'a.b': { $all: [ 20, 30 ] } } ).count() , n + " P" ); } -doTest(); +doTest( "no index" ); t.drop(); t.ensureIndex( {a:1} ); -doTest(); +doTest( "with index" ); |