我在Mongodb的集合中有一些文档:
{_id : ObjectId('533af69b923967ac1801e113'), fKey : '533aeb09ebef89282c6cc478', ... }
{_id : ObjectId('5343bd1e2305566008434afc'), fKey : ObjectId('5343bd1e2305566008434afc'), ...} }
如您所见,我的字段 fkey 可以通过字符串或 ObjectId 进行设置。
我想获取与"533aeb09ebef89282c6cc478"或 ObjectId('5343bd1e2305566008434afc'(匹配的所有文档。
但是如果我运行:
db.mycollection.find({fkey : '533aeb09ebef89282c6cc478'})
我只得到集合的第一个文档。
有没有办法配置 Mongodb 以便在不检查类型的情况下获取与请求匹配的所有文档?
感谢您的帮助。
皮尔
这里有两个选项。
你可以使用 mongo 的$or
运算符:
db.mycollection.find({
$or: [
{ fKey: '533aeb09ebef89282c6cc478' },
{ fKey: ObjectId( '533aeb09ebef89282c6cc478' ) }
]
})
$or
运算符对包含两个或多个<expressions>
的数组执行逻辑OR
操作,并选择满足至少一个<expressions>
的文档。
您还可以使用 $in
运算符:
db.mycollection.find({
fKey: {
"$in": [ '533aeb09ebef89282c6cc478', ObjectId( '533aeb09ebef89282c6cc478' ) ]
}
})
$in
运算符选择字段值等于指定数组中任何值的文档。
在我看来,这些不一致并不意味着存在。我建议浏览您的代码和数据管道,并找出谁/什么在插入具有未知数据类型的fKey
值。