На MongoDB, как отфильтровать документы, где поле с массивом строк содержит определенную строку? - PullRequest
0 голосов
/ 29 сентября 2010

Например, у меня могут быть документы типа:

doc1 = {
  title: "First blog post",
  tags: ["family", "sensitive", "private"]
}

doc2 = {
  title: "Second blog post",
  tags: ["travel", "photos"]
}

И я хотел бы перечислить все сообщения, которые не содержат тег "private" (в приведенном выше примере), это вернуло бы только doc2).Я пытался сделать это:

Я пытался сделать это:

db.posts.find({$not: {tags: 'private'}})

Это ничего не возвращает.Я попробовал это:

db.posts.find({$not: {tags: {$all: ['private']}}})

Ничего еще.

Затем я попробовал это:

db.posts.find({$where: function() { var i; for(i=0; i < this.tags.length; i++) {if (this.tags[i] == 'private'){ return false;}}; return true;}})

И это привело меня к этой ошибке:

"$err" : "error on invocation of $where function:\nJS Error: TypeError: this.tags has no properties nofile_b:2",
        "code" : 10071

Есть идеи?

1 Ответ

2 голосов
/ 29 сентября 2010

$not немного странно, используйте $ne:

db.posts.find({tags : {$ne : 'private'}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...