2

我正在尝试进行查询以查找我的文档的哈希字段中存在的值在此处输入图像描述

我想检索在持续时间字段中具有 n11 和 n13 的文档。

我虽然会是这样。

{
"durations" : { $in: ['n11','n12']}
}

但它不起作用

{
"durations" : { $in: [1,2,3,4,5,6,7,8,9]}
}

但在这两种情况下,我都没有执行查询的结果。

提前感谢您的帮助我也尝试过使用钥匙

4

2 回答 2

5

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

durations不等于1, 2,n11n12。因此这些查询中的任何一个都无法匹配文档。当您使用$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"
    ]
}
于 2013-11-10T12:18:01.790 回答
1

感谢上一个答案,我找到了解决方案。

我的领域是这样定义的

/**
 * @MongoDB\Hash
 */
protected $durations;

但是哈希类型是为关联数组定义的,在我的情况下,只有值对我很重要

所以我把它改成

/**
 * @MongoDB\Collection
 */
protected $durations;

之后我就可以做这个查询

{
"durations" : { $in: ['n11','n12']}
}

我得到了相关的结果。

感谢大家

于 2013-11-11T07:24:07.693 回答