Query for documents where array size is greater than 1

后端 未结 14 2152
北海茫月
北海茫月 2020-11-22 03:02

I have a MongoDB collection with documents in the following format:

{
  \"_id\" : ObjectId(\"4e8ae86d08101908e1000001\"),
  \"name\" : [\"Name\"],
  \"zipcod         


        
14条回答
  •  Happy的楠姐
    2020-11-22 03:28

    I believe this is the fastest query that answers your question, because it doesn't use an interpreted $where clause:

    {$nor: [
        {name: {$exists: false}},
        {name: {$size: 0}},
        {name: {$size: 1}}
    ]}
    

    It means "all documents except those without a name (either non existant or empty array) or with just one name."

    Test:

    > db.test.save({})
    > db.test.save({name: []})
    > db.test.save({name: ['George']})
    > db.test.save({name: ['George', 'Raymond']})
    > db.test.save({name: ['George', 'Raymond', 'Richard']})
    > db.test.save({name: ['George', 'Raymond', 'Richard', 'Martin']})
    > db.test.find({$nor: [{name: {$exists: false}}, {name: {$size: 0}}, {name: {$size: 1}}]})
    { "_id" : ObjectId("511907e3fb13145a3d2e225b"), "name" : [ "George", "Raymond" ] }
    { "_id" : ObjectId("511907e3fb13145a3d2e225c"), "name" : [ "George", "Raymond", "Richard" ] }
    { "_id" : ObjectId("511907e3fb13145a3d2e225d"), "name" : [ "George", "Raymond", "Richard", "Martin" ] }
    >
    

提交回复
热议问题