【问题标题】:Mongoose query for obtaining all results that contains an array of strings that matches any string in a list用于获取包含与列表中的任何字符串匹配的字符串数组的所有结果的 Mongoose 查询
【发布时间】:2025-12-14 21:30:01
【问题描述】:

所以想象一下,我在 Mongoose 的一个对象中有一个数组。例如,一个帐户有许多别名:

别名:["a", "b", "c", "d"]

现在,假设我想查找所有别名为“a”或“c”的帐户。

您将如何在 mongoose/mongodb 中执行此操作?我知道您可以使用 $regex 来查找具有“a”或“c”之一的帐户,但是您如何为任意匹配列表执行此操作?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以使用$in 运算符

    db.accounts.find({aliases: {$in: ["a", "c"]}});
    

    【讨论】:

    • 如果我这样做,那么它仅在别名引用一个名称而不是名称列表时才有效。
    • @user3736336 哦,所以你希望别名数组包含"a" AND "c"
    • 不是 a 和 c,但我想要包含 a 或 c 的。
    • @user3736336 这正是这个查询所做的——“a”或“c”。查看文档:docs.mongodb.org/v3.0/reference/operator/query/in
    【解决方案2】:

    我用c#驱动写linq,

       IMongoQuery mongoQuery = Query<YourEntity>.Where(a => a.Aliases.Contains("a") || a.Aliases.Contains("c"));
    
            var str1 = mongoQuery.ToString(); 
    

    这是司机的翻译

    { "$or" : [{ "别名" : "a" }, { "别名" : "c" }] }

    【讨论】:

    • OP没有使用C#,他特意说的是Mongoshell或者Mongoose
    • { "$or" : [{ "Aliases" : "a" }, { "Aliases" : "c" }] } 是 bson 查询
    • @David Grinberg c#官方驱动是10gen提供的,可以让你写linq,驱动可以把linq翻译成bson query。 offen ,这意味着通过 bson 查询语句进行查询的最佳方式。可以在mongoVUE和mongoose中使用
    • 这很好,花花公子,但 OP 仍然没有要求 c# 解决方案。此外,$in 运算符更简单。