Запрос на поиск документов с дополнительными элементами в массиве

Другой аналогичный подход заключается в использовании htaccess mod_rewrite , чтобы игнорировать часть пути при обслуживании файлов. Ваша никогда не кэшированная индексная страница ссылается на последний путь к файлам.

С точки зрения развития это так же просто, как использование параметров для номера версии, но оно столь же устойчиво, как и имя файла.

Используйте проигнорированную часть пути для номера версии, и сервер просто игнорирует его и обслуживает незашифрованный файл.

1.2.3/css/styles.css служит для того же файла, что и css/styles.css, поскольку первый каталог разделяется и игнорируется файлом htaccess

Включая файлы версий




  
    
    
    
    
    
    
  
  
    
  

Обратите внимание, что этот подход означает, что вам нужно отключить кеширование вашей индексной страницы - Использование & lt; meta & gt; теги, чтобы отключить кеширование во всех браузерах?

.htaccess file

RewriteEngine On

# if you're requesting a file that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-f 
# likewise if a directory that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise, rewrite foo/bar/baz to bar/baz - ignore the first directory
RewriteRule ^[^/]+/(.+)$ $1 [L] 

Вы можете использовать тот же подход на любой серверной платформе, которая позволяет переписывать URL

(переписать условие, адаптированное из mod_rewrite - переписать каталог в строку запроса, кроме / #! / )

... и если вам нужно кеш-брейдинг для вашей индексной страницы / точки входа в сайт, вы всегда можете использовать gS-версию JavaSript , чтобы обновить ее.

0
задан Julien TASSIN 13 July 2018 в 10:28
поделиться

4 ответа

Попробуйте следующее:

db.article.find({attributes: { $elemMatch: { value: {$ne: 'a'}}}})
3
ответ дан Pouya Jabbarisani 17 August 2018 в 13:10
поделиться

Вам нужно использовать несколько условий в сочетании с $or проверкой $size массива:

db.article.find({$or: [
  {"attributes.value": "a", "attributes": {$not: {$size: 1}}},
  {"attributes.value": {$nin: ["a"]}, "attributes": {$not: {$size: 0}}},
]})

Первый соответствует документам с attributes, у которого есть элемент {value: "a"} +, по крайней мере, 1.

Второе условие соответствует документам с непустым attributes, который не имеет элемента {value: "a"}.

Он будет соответствовать документам с любым дополнительным элементом в массиве, даже если у него нет value, например

db.article.insert({attributes: [{notvalue: 'a'}]})

, все равно будет соответствовать.

Если вам нужно сопоставить документы, где attributes имеет как минимум 1 дополнительный элемент с непустым value, другого варианта нет, но используйте $expr с выражениями агрегации:

db.article.find({ $expr: { $gt: [ 
    { $size: { $filter: { 
        input: "$attributes", 
        as: "attribute", 
        cond: { $ne: [ { $ifNull: [ "$$attribute.value", "a" ] }, "a" ]  } 
    } } },
    0
] } })    
2
ответ дан Alex Blex 17 August 2018 в 13:10
поделиться

Вы можете попробовать выполнить запрос

Первый - $elemMatch запрос, а второй - $elemMatch проекция

db.collection.find({
  "attributes": { "$elemMatch": { "value": { "$ne": "a" } } }
}, {
  "attributes": { "$elemMatch": { "value": { "$ne": "a" } } }
})
1
ответ дан Anthony Winzlet 17 August 2018 в 13:10
поделиться

Вы можете использовать $nin для фильтрации массивов, содержащих другие элементы, чем предопределенные элементы:

db.article.find({"attributes.value": {$nin: ["a"] }})
0
ответ дан Mạnh Quyết Nguyễn 17 August 2018 в 13:10
поделиться
  • 1
    это не дает мне дополнительного поведения элемента: / – Julien TASSIN 13 July 2018 в 11:38
Другие вопросы по тегам:

Похожие вопросы: