我正在尝试查询以查找哈希字段中存在的值 我的文件
我想检索持续时间字段中包含n11和n13的文档。
我虽然会那样。
{
"durations" : { $in: ['n11','n12']}
}
但它不起作用
{
"durations" : { $in: [1,2,3,4,5,6,7,8,9]}
}
但在这两种情况下,我都没有执行查询的结果。
提前感谢您的帮助 我也尝试过用键
答案 0 :(得分:5)
$ 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"
]
}
答案 1 :(得分:1)
感谢上一个回答,我找到了解决方案。
我的字段定义如下
/**
* @MongoDB\Hash
*/
protected $durations;
但Hash类型是为associatives数组定义的,在我的例子中只有值对我来说很重要
所以我把它改成
/**
* @MongoDB\Collection
*/
protected $durations;
之后我就能够进行此查询
{
"durations" : { $in: ['n11','n12']}
}
我得到了相关的结果。
感谢大家