mongodb查询哈希字段中的$in

mongodb查询哈希字段中的$in,mongodb,Mongodb,我正在尝试进行查询以查找哈希字段中存在的值 我的文件 我想检索在durations字段中包含n11和n13的文档 我想会是那样的 { "durations" : { $in: ['n11','n12']} } 但它不起作用 { "durations" : { $in: [1,2,3,4,5,6,7,8,9]} } 但在这两种情况下,我都没有执行查询的结果 提前谢谢你的帮助 我也试过用钥匙 $in运算符选择字段值等于指定数组中任何值的文档 持续时间不等于1、2、n11、n12等。因此这些查询都

我正在尝试进行查询以查找哈希字段中存在的值 我的文件

我想检索在durations字段中包含n11和n13的文档

我想会是那样的

{
"durations" : { $in: ['n11','n12']}
}
但它不起作用

{
"durations" : { $in: [1,2,3,4,5,6,7,8,9]}
}
但在这两种情况下,我都没有执行查询的结果

提前谢谢你的帮助 我也试过用钥匙

$in运算符选择字段值等于指定数组中任何值的文档

持续时间
不等于
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({
    "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;
但是Hash类型是为Associates数组定义的,在我的例子中,只有值对我很重要

所以我把它改成

/**
 * @MongoDB\Collection
 */
protected $durations;
然后我就可以做这个查询了

{
"durations" : { $in: ['n11','n12']}
}
我得到了相关的结果


感谢你们大家

我想把它作为你们的最后一个示例,但我使用的是条令,我不知道如何将php数组转换为这个持续时间“持续时间”:[“n3”,“n11”,“n12”]有什么想法吗?即使这样做之后,最后一个祝福也不可能:{'$set':{durations:[“n1”,“n2”,“n3”]}mongo正在为我的3个值n1添加一些键,n2,N3和我得到的“持续时间”:{“0”:“n1”,“1”:“n2”,“2”:“N3”},不是真的。我不使用php。也许这会有帮助:。还有另一个模式允许保留间隔和持续时间:持续时间:[{interval:1,value:“n3”},{interval:2,value:“n11”},等等]然后您可以查询“duration.value”:{$in:[list]},但只有您可以知道数据上的其他操作是否与此模式或任何其他模式兼容(就像答案中提出的那样)。