Другой аналогичный подход заключается в использовании htaccess mod_rewrite , чтобы игнорировать часть пути при обслуживании файлов. Ваша никогда не кэшированная индексная страница ссылается на последний путь к файлам.
С точки зрения развития это так же просто, как использование параметров для номера версии, но оно столь же устойчиво, как и имя файла.
Используйте проигнорированную часть пути для номера версии, и сервер просто игнорирует его и обслуживает незашифрованный файл.
1.2.3/css/styles.css
служит для того же файла, что и css/styles.css
, поскольку первый каталог разделяется и игнорируется файлом htaccess
Обратите внимание, что этот подход означает, что вам нужно отключить кеширование вашей индексной страницы - Использование & lt; meta & gt; теги, чтобы отключить кеширование во всех браузерах?
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 , чтобы обновить ее.
Попробуйте следующее:
db.article.find({attributes: { $elemMatch: { value: {$ne: 'a'}}}})
Вам нужно использовать несколько условий в сочетании с $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
] } })
Вы можете попробовать выполнить запрос
Первый - $elemMatch
запрос, а второй - $elemMatch
проекция
db.collection.find({
"attributes": { "$elemMatch": { "value": { "$ne": "a" } } }
}, {
"attributes": { "$elemMatch": { "value": { "$ne": "a" } } }
})
Вы можете использовать $nin
для фильтрации массивов, содержащих другие элементы, чем предопределенные элементы:
db.article.find({"attributes.value": {$nin: ["a"] }})