【问题标题】:Mongoose find and create multidimensional arraysMongoose 查找并创建多维数组
【发布时间】: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
    }

【问题讨论】:

  • 对不起,我不明白你要完成什么。如果您可以添加查询示例和预期结果,那将很有帮助

标签: javascript arrays node.js mongodb mongoose


【解决方案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(...);
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多