Как исключить поле, содержащее текст, и вернуть как ноль, так и не существует?
Я использую Studio3T для запуска MongoDB, но я новичок. У меня есть поле publishing.notes, которое я использую для исключения элементов из отчета. Обычно это поле не используется, поэтому в большинстве документов НЕ заполнено это поле, и мы использовали этот код ниже для отчета. (публикация. примечания - последняя строка)
{
$and: [
{
"warehouses.code": "RSDMAIN"
}
,
{
"warehouses.0.quantity": {
$gt: NumberInt(0)
}
}
,
{
"images.0.image": {
$exists: false
}
}
,
{
"featured_image.slug": {
$exists: false
}
}
,
{
"publication.status": {
$ne: "discontinued"
}
}
,
{
"publication.status": {
$ne: "rejected"
}
}
,
{
"product_type": {
"$in":[
"standard" ,
null
]
}
}
,
{
"publication_notes": {
$exists: false
}
}
]
}
Проблема в том, что у нас был небольшой процент документов, которые заполняются примечаниями публикации, но он остается нулевым. Я хотел бы, чтобы в моем отчете содержались как нулевые, так и несуществующие документы, но при этом исключались бы документы с реальным текстом. Все, что я пробую, делает меня либо нулевым, либо DNE.
Я попытался поиграться с "publishing.notes": { $not: { $type: 2 } }, но они возвращают тот же отчет, что и "publishing_notes": { $exist: false }, что заставляет меня думать, что он видит все то есть в поле в виде строки, даже если это ноль.
1 ответ
Пожалуйста, попробуй publication_notes : null
получить как ноль, так и не существует
сбор образцов
> db.t44.find()
{ "_id" : ObjectId("5c3543fc01f1171d3864b924"), "a" : "asdaw" }
{ "_id" : ObjectId("5c35440201f1171d3864b925"), "a" : null }
{ "_id" : ObjectId("5c35440601f1171d3864b926") }
найти результат
> db.t44.find({a : null})
{ "_id" : ObjectId("5c35440201f1171d3864b925"), "a" : null }
{ "_id" : ObjectId("5c35440601f1171d3864b926") }
>