我有一个MongoDB集合,其格式如下:
{
"_id" : ObjectId("4e8ae86d08101908e1000001"),
"name" : ["Name"],
"zipcode" : ["2223"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000002"),
"name" : ["Another ", "Name"],
"zipcode" : ["2224"]
}
我目前可以获得与特定数组大小匹配的文档:
db.accommodations.find({ name : { $size : 2 }})
这正确地返回name数组中有2个元素的文档。但是,我不能做一个$gt命令来返回name字段数组大小大于2的所有文档:
db.accommodations.find({ name : { $size: { $gt : 1 } }})
我怎样才能选择所有文件的name数组大小大于1(最好不必修改当前的数据结构)?
在MongoDB 2.2+中有更高效的方法可以在查询对象键中使用数字数组索引。
// Find all docs that have at least a second name array element.
db.accommodations.find({'name.1': {$exists: true}})
1.使用$ where
db.accommodations.find({$ where:“this.name.length> 1”});
2.创建额外的字段NamesArrayLength,用名称数组长度更新,然后在查询中使用:
db.accommodations.find({“NamesArrayLength”:{$ gt:1}});
使用第二个办法比较好,运行效率要高很多