查询数组大小大于1的文档

查询数组大小大于1的文档

我有一个MongoDB集合,其文档格式如下:

{
  "_id" : ObjectId("4e8ae86d08101908e1000001"),
  "name" : ["Name"],
  "zipcode" : ["2223"]}{
  "_id" : ObjectId("4e8ae86d08101908e1000002"),
  "name" : ["Another ", "Name"],
  "zipcode" : ["2224"]}

我目前可以获得与特定数组大小匹配的文档:

db.accommodations.find({ name : { $size : 2 }})

将正确地返回带有两个元素的文档。name阵列。但是,我不能$gt命令返回name字段的数组大小大于2:

db.accommodations.find({ name : { $size: { $gt : 1 } }})

如何使用name大小大于一个的数组(最好不必修改当前的数据结构)?


撒科打诨
浏览 825回答 3
3回答

郎朗坤

在MongoDB2.2+中,有一种更有效的方法可以在查询对象键中使用数字数组索引。// Find all docs that have at least a second name array element.db.accommodations.find({'name.1': {$exists: true}})您可以使用部分筛选表达式(要求3.2+)的索引来支持此查询:db.accommodations.createIndex(     {'name.1': 1},     {partialFilterExpression: {'name.1': {$exists: true}}});

慕田峪7331174

我相信这是回答你问题的最快的查询,因为它不使用解释$where条款:{$nor: [     {name: {$exists: false}},     {name: {$size: 0}},     {name: {$size: 1}}]}它的意思是“所有文档,但没有名称的文档(不存在或空数组)或只有一个名称的文档除外。”测试:> 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" ] }>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB