Jak sprawdzić, czy pole tablicy zawiera unikalną wartość lub inną tablicę w MongoDB?

Używam teraz mongodb.

Mam kolekcję blogpost, a blogpost ma złożony znacznik, który jest tablicą, np.

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']

Jak mogę wykonać te Wyszukiwania

  1. zawiera 'tag1'
  2. zawiera ['tag1','tag2'],
  3. zawiera dowolne z ['tag3','tag4']
 140
Author: user2398029, 2011-03-20

2 answers

Wypróbuj to:

db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3
 218
Author: Jeff the Bear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-29 22:40:22

Moje doświadczenie jest takie, że dla (2) następujące rozwiązanie jest znacznie szybsze niż to z "$all":

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });
Ale szczerze mówiąc, Nie wiem dlaczego. Byłbym zainteresowany, gdyby ktoś wiedział.
 5
Author: heinob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-10 11:43:30