Mongoose 查找并创建多维数组

Posted

技术标签:

【中文标题】Mongoose 查找并创建多维数组【英文标题】:Mongoose find and create multidimensional arrays 【发布时间】:2017-03-07 11:46:09 【问题描述】:

我正在尝试获取用户 ID,以及包含位置中特定位置的数组对象。

我想要完成的是:

查询将返回数组位置的结果。

如果根本不存在userid,则创建它,然后返回匹配位置的数组。

如果位置 ID 号不存在。创建一个新的,然后返回匹配位置的数组。

我怎样才能做到这一点?

当前查询:

 easyCrime.findOne(
        userid: userid,
        "locations.location": location
    , "locations.$.location": 1).then(function (err, stats) 


        

    );

型号:

   userid: 
        type: String,
        default: '57c1c0f3b6b20c011242bf22'
    ,
    locations: [
        
            userid: 
                type: String,
                default: '57c1c0f3b6b20c011242bf22'
            ,
            location: 
                type: Number,
                default: 1
            ,
            easycrime: [
                
                    optioname : 
                        type: String,
                        default: 'unknown'
                    ,
                    chance: 
                        type: Number,
                        default: 500
                    
                
            ],
            heavycrime: [
                
                    optioname : 
                        type: String,
                        default: 'unknown'
                    ,
                    chance: 
                        type: Number,
                        default: 500
                    
                
            ],


        
    ],

    timesteal: 
        type:Number,
        default: 0
    

【问题讨论】:

对不起,我不明白你要完成什么。如果您可以添加查询示例和预期结果,那将很有帮助 【参考方案1】:

我假设 easyCrime 是 Model,因为 Document 中没有 findOne 查询之类的东西。如果是模型,请将其命名为 EasyCrime。


我很难解释你的问题。根据我的理解,这是您的解决方案
EasyCrime
    .findOne( userid: param.userid)
    .exec((err, crime) => 

        //userid not exists at all, create new
        if (!crime) 
            let newCrime = new EasyCrime(...);
            newCrime.save(...);
            return;
        

        //Check if location exists
        for (let i = 0; i < crime.locations.length; ++i) 
            if (crime.locations[i].location === param.location) 
                //crime.location[i] is what you're finding
                return;
            
        

        //Cannot find any location with provided param.location
        crime.locations.push(
            userid: ...,
            location: param.location,
            ...
        );

        crime.save(...);
    )

【讨论】:

以上是关于Mongoose 查找并创建多维数组的主要内容,如果未能解决你的问题,请参考以下文章

将项目添加到 Mongoose 中的多维对象数组

查找并替换多维数组中的每个元素 [关闭]

NodeJs MongoDb Mongoose - 如何从多维数组中删除项目?

动态访问多维数组值

VBScript 创建一个多维数组并添加到它?

PHP - 在多维数组中查找键