mongodb query without field name

前端 未结 2 455
迷失自我
迷失自我 2020-12-18 14:55

I would like query all objects that have a field containing a specific value. For example, I have two documents:

{\"123\": \"apple\", \"217\": \"pear\", \"17         


        
2条回答
  •  猫巷女王i
    2020-12-18 15:28

    Unfortunately, MongoDB does not support any method of querying all fields with a particular value. There is an existing Jira ticket requesting this enhancement: https://jira.mongodb.org/browse/SERVER-1248 . Feel free to comment, vote, or follow that ticket.

    In the meantime, the usual way that this is handled is to change the MongoDB schema. For your example, you would change your existing schema:

    {"123": "apple", "217": "pear", "179": "orange"} 
    {"831": "pear", "189": "grapes"} 
    

    And you might structure it something like this:

     { tags: [
            { cid: "123", value: "apple" },
            { cid: "217", value: "pear" },
            { cid: "179", value: "orange" },
          ]
        }
       { tags: [
            { cid: "831", value: "pear" },
            { cid: "189", value: "grapes" },
          ]
        }
    

    Once you've done this, you can perform the follwing query to find all of the desired documents:

     db.docs.find( {'tags.value': "apple" } )
    

    Note that this schema allows you to index the 'tags.cid' and 'tags.value' fields, which your original schema does not.

    I hope this helps.

    -William

提交回复
热议问题