我正在尝试进行查询以查找我的文档的哈希字段中存在的值
我想检索在持续时间字段中具有 n11 和 n13 的文档。
我虽然会是这样。
{
"durations" : { $in: ['n11','n12']}
}
但它不起作用
{
"durations" : { $in: [1,2,3,4,5,6,7,8,9]}
}
但在这两种情况下,我都没有执行查询的结果。
提前感谢您的帮助我也尝试过使用钥匙
我正在尝试进行查询以查找我的文档的哈希字段中存在的值
我想检索在持续时间字段中具有 n11 和 n13 的文档。
我虽然会是这样。
{
"durations" : { $in: ['n11','n12']}
}
但它不起作用
{
"durations" : { $in: [1,2,3,4,5,6,7,8,9]}
}
但在这两种情况下,我都没有执行查询的结果。
提前感谢您的帮助我也尝试过使用钥匙
$in 运算符选择字段值等于指定数组中的任何值的文档。
durations
不等于1
, 2
,n11
等n12
。因此这些查询中的任何一个都无法匹配文档。当您使用$in
运算符时,它将仅匹配如下查询:
db.foo.find({
"durations" : {
"$in": [{"1" : "n3","2" : "n11", "3": "n12"}]
}
})
第二个查询可以这样重写:
db.foo.find({
$or: [{"durations.1": {$exists: true}}, {"durations.2": {$exists: true}}]
})
如果要匹配单个值,则必须通过完整路径进行:
db.foo.find({
$or: [{"durations.1": "n3"}, {"durations.2": "n11"}]
})
如果想使用这样的查询:
db.foo.find({"durations" : { $in: ['n11','n12']}})
您将需要类似于此的架构:
{
"_id" : ObjectId("527f7ad945cb10ba295df9fd"),
"durations" : [
"n3",
"n11",
"n12"
]
}
感谢上一个答案,我找到了解决方案。
我的领域是这样定义的
/**
* @MongoDB\Hash
*/
protected $durations;
但是哈希类型是为关联数组定义的,在我的情况下,只有值对我很重要
所以我把它改成
/**
* @MongoDB\Collection
*/
protected $durations;
之后我就可以做这个查询
{
"durations" : { $in: ['n11','n12']}
}
我得到了相关的结果。
感谢大家