【问题标题】:MongoDB select all fields that have values that are not in an arrayMongoDB选择所有值不在数组中的字段
【发布时间】:2017-03-06 21:07:35
【问题描述】:

我有以下场景:

 { 
   id: 1,
   field_X: [a, b]
 },
 { 
   id: 2,
   field_X: [c, d]
 },
 { 
   id: 3,
   field_X: [d]
 },
 { 
   id: 4,
   field_X: [a]
 },
 { 
   id: 5,
   field_X: [a,b,c,f]
 }

我想从这个数组中找到包含任何元素的所有字段: [a,b,c] 但没有任何其他元素;所以正确的结果是:

 { 
   id: 1,
   field_X: [a, b]
 },
 { 
   id: 4,
   field_X: [a]
 }

如何在 MongoDB 中做到这一点?

【问题讨论】:

    标签: mongodb search


    【解决方案1】:
    db_name.collection_name.find(({'field_X': {'$in': ['a', 'b', 'c'], '$nin': ['d', 'f']} })
    

    【讨论】:

    • 问题是 b 和 f 是未知的,可以是可变的。
    【解决方案2】:
    db.collection.find({ 'field_X': {'$in': [/[abc]/], '$nin': [/[^abc]/]} })
    

    【讨论】:

    • 现在,您知道如何将其移至 PHP 中吗?
    • @ClaudiuHardalau Chameleon questions 在 SO 上不被鼓励,因为它看起来像你原来的问题 How can I do this in MongoDB? 解决了,不是吗?跨度>
    • 所以,基本上你是在建议这个: db.getCollection('users').find({ 'role_id': {'$in': [/['a', 'b', ' c']/], '$nin': [/[^'a', 'b', 'c']/]} }) ?它似乎无法正常工作
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2013-06-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多