Pregunta

Suppose I have several documents like so

{
  title: 'blah',
  value: {
    "A": {property: "foo"},
    "B": {property: "bar"},
    "C": {property: "foo"},
    "D": {property: "foo"}
  }
}

{
  title: 'blah2',
  value: {
    "A": {property: "bar"},
    "B": {property: "bar"},
    "C": {property: "bar"},
    "D": {property: "foo"}
  }
}

What mongodb query will get me all of the documents / hash keys that have {property: "foo"}

(I know this can be done using js after the query, but can it be done within the query itself?)

¿Fue útil?

Solución

The trouble is that there's no wildcard for object keys (see https://jira.mongodb.org/browse/SERVER-267), so you wouldn't be able to do this without listing all of the keys in your "value". That might be an option if you know what all of the keys are, but I imagine you don't.

If you converted "value" to an array rather than an object, you could do a query easily (which would return the documents, not the hash keys).

Otros consejos

As the first answer says, there is nothing in the mongodb query language that would allow you to do this type of query.

You might want to consider altering your schema to make value an array like this:

value: [
         { name : "A", property : "bar" },
         { name : "B", property : "bar" },
         { name : "C", property : "bar" },
         { name : "D", property : "foo" }
       ]

Then you could index on value.property and run a query on value.property = "foo".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top