deleteMany не работает с оператором $ size - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь удалить все коллекции, где вложенный документ "вложенный" имеет элемент 0.

 Tag.deleteMany({ "blog": { $size: 0 } }).exec()

По какой-то причине он не работает с Mongoose, но работает, когда я запускаю его вRobo

db.getCollection('tags').deleteMany({ "blog": { $size: 0 } })

Кто-нибудь знает, почему он работает в оболочке запросов, а не с кодом Mongoose?Вот схема.

var tagSchema = new mongoose.Schema({
tag: String,
created: { type: Date, default: Date.now },
blog: [{ type: mongoose.Schema.Types.ObjectId,
         ref: "blog" }]

var blogSchema = new mongoose.Schema({
title: String,
image: String,
description: String,
body: String,    
created: { type: Date, default: Date.now },
tag:[{  type: mongoose.Schema.Types.ObjectId,
        ref: "tag" }]

ОБНОВЛЕНИЕ ... Я думаю, что теперь это проблема цепочки Promise?

 let foundBlog
 Blog.findOne({ title: '1st Post' })            
        .then((blog) => { 
            foundBlog = blog;                
        })
        .then(() => {
            console.log(foundBlog.tag)
            Tag.updateMany(                 
            { _id : { $in: foundBlog.tag} },
            { $pull: { blog: foundBlog._id.toString()} }).exec()                
        })
        .then(() => {
            Tag.deleteMany({ "blog": { $size: 0 } }).exec()
        })
        .then(() => done())

По какой-то причине Tag.deleteMany не работал после Tag.updateMany.Моя цепочка обещаний верна?Спасибо

1 Ответ

0 голосов
/ 30 ноября 2018

Попробуйте создать цепочку следующим образом:

let foundBlog
 Blog.findOne({ title: '1st Post' })            
    .then((blog) => { 
        foundBlog = blog;                
    })
    .then(() => {
        console.log(foundBlog.tag)
        Tag.updateMany(                 
            { _id : { $in: foundBlog.tag} },
            { $pull: { blog: foundBlog._id.toString()} })
            .then(() => {
                Tag.deleteMany({ "blog": { $size: 0 } }).then(() => done())  
            })           
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...