【发布时间】:2016-04-13 14:49:08
【问题描述】:
我的收藏是这样的
Name : "name" Serial:"100" Name : "name1" Serial:"4200" Name : "name2" Serial:"1200"
我需要查找包含 Name 且包含值 "name" 或 Serial 包含 "200" 的文档
非常感谢您的指导。
【问题讨论】:
标签: mongodb-php
我的收藏是这样的
Name : "name" Serial:"100" Name : "name1" Serial:"4200" Name : "name2" Serial:"1200"
我需要查找包含 Name 且包含值 "name" 或 Serial 包含 "200" 的文档
非常感谢您的指导。
【问题讨论】:
标签: mongodb-php
如果你有这样的数据:
{ "_id" : ObjectId("..."), "name" : "nameA", "serial" : 1200 }
{ "_id" : ObjectId("..."), "name" : "nameB", "serial" : 1234 }
{ "_id" : ObjectId("..."), "name" : "nameC", "serial" : 4200 }
如果你想用正则表达式查询字段serial,你可以做聚合:
db.coll.aggregate(
{$project: {name: true, serial: {$toLower: '$serial'}}},
{$match: {serial: /20/}})
)
// { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" }
// { "_id" : ObjectId("..."), "name" : "nameC", "serial" : "4200" }
db.coll.aggregate(
{$project: {name: true, serial: {$toLower: '$serial'}}},
{$match: {serial: /12/}})
)
// { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" }
// { "_id" : ObjectId("..."), "name" : "nameB", "serial" : "1234" }
但这是一个 hack,我不会在我的工作中使用这种方法。也许有办法重新组织你的数据结构?
而且你必须知道你不能在这个查询中使用任何索引,mongo 会做全表扫描。
希望我正确理解了您的问题;)。
【讨论】:
$or。
$toLower。