Mongodb deleteMany不使用$size运算符

Mongodb deleteMany不使用$size运算符,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我正在尝试删除嵌套文档嵌套有0个元素的所有集合 Tag.deleteMany({ "blog": { $size: 0 } }).exec() 出于某种原因,它对猫鼬不起作用, 但当我在机器人上运行它的时候,它就工作了 db.getCollection('tags').deleteMany({ "blog": { $size: 0 } }) 有人知道为什么它在查询shell中工作,而不是在Mongoose代码中工作吗? 这是模式 var tagSchema = new mongoose.S

我正在尝试删除嵌套文档嵌套有0个元素的所有集合

 Tag.deleteMany({ "blog": { $size: 0 } }).exec()
出于某种原因,它对猫鼬不起作用, 但当我在机器人上运行它的时候,它就工作了

db.getCollection('tags').deleteMany({ "blog": { $size: 0 } })
有人知道为什么它在查询shell中工作,而不是在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" }]
更新。。。我认为现在是承诺链的问题

 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之后不起作用。 我的承诺正确吗?谢谢

尝试以下链接方式:

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())  
            })           
    })

是的,它是有定义的。var schema=new mongoose.schema{tag:String,nested:[{type:mongoose.schema.Types.ObjectId,ref:nested}]我用一个超级简单的模式测试了mongoose查询,结果与预期的一样。Author.deleteMany{data.books:{$size:0}.exec,电子邮件模式为字符串,data.books为另一个称为books的ref模型数组。这些都很方便。问题出在其他地方。也许还可以发布您的模式?我包括了我的实际运行代码。我缩小到了承诺链接问题…我怀疑我从Tag.updateMany到Tag.deleteMany的链接不正确?我是ded console.log在每次之前和之后。然后运行,执行顺序似乎是正确的…UpdateMany End->DeleteMany Start->DeleteMany End->Done这就解决了问题。非常感谢,这确实帮助我更好地理解了承诺的工作原理。