【问题标题】:Query find mongoose returns a document while its not $in array查询 find mongoose 返回一个文档而不是 $in 数组
【发布时间】:2018-12-21 01:03:22
【问题描述】:

我在使用 mongoose 查询时遇到问题。

我正在尝试检查具有 Id 的对象是否在对象数组中。

所以我的查询是这样的

db.getCollection('adunits').find(
{_id: ObjectId("5bd9bc1ca4efae39d0b5a58e")},
    {$in : ["5bf510156c154934150ef006","5bf5309e6c154934150f00a6","5bd9b874a4efae39d0b5a58d","5bf52a876c154934150efe4a"]}

)

如您所见,我的 ObjectId("5bd9...") 不在数组中。但是我的查询返回带有 ObjectId("5bd9...") 的文档。 $in 运算符不应该检查 _id in 参数是否在数组中吗? 我希望它可以返回一个“0 fetched documents”,因为传递的 id 不在数组中。

提前致谢

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您的查询不正确。

    您可以像这样通过 id 查找:

    db.getCollection('adunits')
        .find({_id: ObjectId("5bd9bc1ca4efae39d0b5a58e")})
    

    获取单个文档或像这样使用 $in 运算符

    db.getCollection('adunits')
        .find({_id: { $in: ["5bf510156c154934150ef006","5bf5309e6c154934150f00a6",...]})
    

    这将返回具有数组中提供的 id 之一的文档。

    【讨论】:

    • 感谢您的帮助,但我不明白您如何使用给定的参数“_id”搜索 $in 数组。就像我的参数是“_id = ObjectId("5bd9bc1ca4efae39d0b5a58e")”那么我如何搜索这个“_id”在数组中?
    • 好吧,如果您只想查找 id 是否在数组中,则无需查询 db。 ["5bf510156c154934150ef006","5bf5309e6c154934150f00a6",...].indexOf('5bd9bc1ca4efae39d0b5a58e')
    • 我确实这样做了,确实我的数组是从数据库中获取的。我在这里放了一个为示例填充的数组,但我使用的是 db.xml 中的一些东西。所以我可以与 indexOf() 进行比较?
    【解决方案2】:

    您查询条件找到_id = ObjectId(“5bd9bc1ca4efae39d0b5a58e”)的adunits,它返回匹配给定条件的值。而 $in 运算符应应用于归档。您是否正在尝试实现某些事情,例如在给定数组中找到与 ids 匹配的文档。如果是,请将您的代码更改为以下。访问mongodb官方https://docs.mongodb.com/manual/reference/operator/query/in/

    db.getCollection('adunits').find(
     { "_id": 
           { $in: 
                 [ "5bf510156c154934150ef006",
                   "5bf5309e6c154934150f00a6",
                   "5bd9b874a4efae39d0b5a58d",
                   "5bf52a876c154934150efe4a"
                ]
          }
    });
    

    【讨论】:

    • 好的,但是没有和我的参数比较吗?就像,我想知道传入参数的 id (此处为 _id = ObjectId("5bd9bc1ca4efae39d0b5a58e") )是否在我的数组中($in ... [])。如果我确实找到 { "_id " : ... 我的参数有什么意义?
    • 你能分享你的架构吗,你要实现什么。
    猜你喜欢
    • 2017-04-17
    • 2020-09-12
    • 1970-01-01
    • 2019-03-19
    • 2019-02-19
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多