【问题标题】:How to get array filters to work for Mongoose? Nodejs, Mongoose, pug如何让数组过滤器为 Mongoose 工作? Nodejs,猫鼬,哈巴狗
【发布时间】:2018-04-07 17:15:04
【问题描述】:

**更新:由于 Mongoose 确实支持数组过滤器而无法正常工作,有人可以弄清楚如何使用 Mongoose 支持的东西来实现这一点,例如 $project 或 $group 或任何东西?

我想要发生的事情: 将“记录”数组中的每个“已使用”字段设置为 true(如果已设置为 false)。

我的收藏是这样的:

{room: 209, 
 school: "Lime Vernon HS", 
 records:[
       {date:'3/24/2018',
        lesson:'Treble Clef', 
        game:'Trebleball', 
        used:false,
        cancel:false
       }, 
       {
         date:'3/24/2018', 
         lesson:'Treble Clef', 
         game:'Trebleball', 
         used:false, 
         cancel:false
       }, 
       {
         date:'3/24/2018', 
         lesson:'', game:'', 
         used:true, 
         cancel:true
       }, 
       {
         date:'3/24/2018', 
         lesson:'Treble Clef', 
         game:'Trebleball', 
         used:false, 
         cancel:false
      }]

这是我使用的代码:

Hook.updateMany({ room:209}, { $set: { "records.$[elem].used" : true } },
{ arrayFilters: [ { "elem.used": false } ] }, function(err){

    if(err){
        console.log(err);
    }
    else{
        return res.redirect("/home")
    }

})

结果:什么也没发生,我的收藏看起来仍然和我什么都没做一样。

我想要的结果(“used”字段设置为true):

{room: 209, 
 school: "Lime Vernon HS", 
 records:[
       {date:'3/24/2018',
        lesson:'Treble Clef', 
        game:'Trebleball', 
        used: true,
        cancel:false
       }, 
       {
         date:'3/24/2018', 
         lesson:'Treble Clef', 
         game:'Trebleball', 
         used: true, 
         cancel:false
       }, 
       {
         date:'3/24/2018', 
         lesson:'', game:'', 
         used:true, 
         cancel:true
       }, 
       {
         date:'3/24/2018', 
         lesson:'Treble Clef', 
         game:'Trebleball', 
         used: true, 
         cancel:false
      }]

这是我的架构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var uniqueValidator = require('mongoose-unique-validator');

var HookSchema = new mongoose.Schema({
room:{
    type:Number,
    required:true
},
classPoints:{
    type:Number,
    default:0
},
uanns: [Announcement], 
newHires: [Workers],
firstlights:[Award],
octlights:[Award],
novlights:[Award],
declights:[Award],
janlights:[Award],
feblights:[Award],
marlights:[Award],
aprlights:[Award],
maylights:[Award],
junlights:[Award],
eon:[AwardB],
milestone:[AwardB],
legend:[AwardB],
eonNominees:[Nominee],
reservedAvatars:[Reserved],
records:[Record]

});

【问题讨论】:

    标签: node.js mongodb mongoose pug


    【解决方案1】:
        Hook.find({room:209}).arrayFilters( [ { "elem.used": false } ] )
       .updateMany( { $set: { "records.$[elem].used" : true } } );
    

    请试试这个,首先过滤:)

    【讨论】:

    • 不,那也没用。不过感谢您的尝试。
    • 架构中使用的类型是什么?
    • 我在帖子底部为您添加了我的架构代码。非常感谢。
    • 我需要使用的类型,例如:字符串或数组?
    • 类型为布尔型
    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多