我在Mongodb的一个集合中有一些文档:
{_id : ObjectId('533af69b923967ac1801e113'), fKey : '533aeb09ebef89282c6cc478', ... }
{_id : ObjectId('5343bd1e2305566008434afc'), fKey : ObjectId('5343bd1e2305566008434afc'), ...} }
正如您所见,我的字段 fkey 可以通过字符串或 ObjectId 设置。
我想获得所有符合'533aeb09ebef89282c6cc478'或ObjectId('5343bd1e2305566008434afc')的文件。
但如果我跑:
db.mycollection.find({fkey : '533aeb09ebef89282c6cc478'})
我只收到该集合的第一份文件。
有没有办法配置Mongodb以获取与请求匹配的所有文档而不检查类型?
感谢您的帮助。
皮尔
答案 0 :(得分:5)
这里有两种选择。
你可以使用mongo的$or
operator:
db.mycollection.find({
$or: [
{ fKey: '533aeb09ebef89282c6cc478' },
{ fKey: ObjectId( '533aeb09ebef89282c6cc478' ) }
]
})
$or
运算符对两个或更多OR
的数组执行逻辑<expressions>
运算,并选择至少满足<expressions>
之一的文档。
您也可以使用$in
operator:
db.mycollection.find({
fKey: {
"$in": [ '533aeb09ebef89282c6cc478', ObjectId( '533aeb09ebef89282c6cc478' ) ]
}
})
$in
运算符选择字段值等于指定数组中任何值的文档。
听起来我觉得这些不一致并不意味着存在。我建议您浏览代码和数据管道,找出使用未知数据类型插入fKey
值的人/内容。