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 查找并创建多维数组的主要内容,如果未能解决你的问题,请参考以下文章