Express/MongoDB: 如何从嵌套字段中获取值
Express/MongoDB: how to get a value from a nested field
首先,如果我没有使用正确的词或者这个问题很愚蠢,我很抱歉,我对此很陌生并且还在学习,这次我无法找到答案我的搜索!
我有一个 MEAN 项目,我想从我的前端数据库中获取一个值(我使用 Angular 4)。所以我尝试在 Express 上写一个函数,但事实是我不知道怎么做,因为我什至无法直接在 mongo.
的命令行中获取值
我的模式采用这种格式:
const userSchema = mongoose.Schema({
username: {
type: String,
required: true,
unique: true
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
item: {
item1: {
type: Number,
default: 0
},
item2: {
type: Number,
default: 0
},
item3: {
type: Number,
default: 0
}
}
});
想法是每个用户都有一个库存,其中包含每个项目的一定数量,我的目标是在使用项目名称发出请求时获取这个特定数量。
但我能做的最好的是 db.users.find({}, {item:1});我用它得到了带有它们的值的整个项目列表,我尝试的所有其他事情都让我出错。所以也许我的架构不正确?
所以我的问题是:
我知道我目前无法直接从 mongo 获取值,如何才能通过将项目名称作为参数传递给 Express 来获取项目值?
知道答案也会帮助我知道以后如何更改此值。
感谢阅读!
[编辑]
此主题被标记为与此主题重复:
How to query nested objects?
但我已经看到了另一个主题,所以是的,有:
db.users.find({ item : { item1 : "0" }}).count();
我可以得到值,但它对我一点帮助都没有,因为你必须写值才能得到值....但我想在不知道值的情况下进行查询,因为这值会改变。
此外,我需要更多关于 Express 方面的建议。
谢谢。
查询将是这样的:
db.users.find({ username: "someuser" }, { "item.item1": 1, "_id": 0 })
1表示你要获取那个字段,不代表它的值。 _id 通常总是 returned,所以我将它设置为 0 而不是 return 在这种特殊情况下。项目名称作为参数传递;在本例中,它是 item1.
查询会 return 像这样:
{ "item" : [ { "item1" : 123 } ] }
很普通JSON所以很容易提取值。
在 Mongoose 中它会是这样的:
const itemname = 'item1';
User
.findOne(
{ username: 'someuser' },
{ [`item.${itemname}`]: true, _id: false },
(err, result) => {
const response = {};
if (err) {
response.status = HttpStatus.INTERNAL_SERVER_ERROR;
response.message = err;
} else {
response.status = HttpStatus.OK;
response.message = result.item[itemname];
}
return res.status(response.status).json(response.message);
}
);
没有正确的错误处理。如果用户不存在,没有项目字段等,代码片段将失败。
首先,如果我没有使用正确的词或者这个问题很愚蠢,我很抱歉,我对此很陌生并且还在学习,这次我无法找到答案我的搜索!
我有一个 MEAN 项目,我想从我的前端数据库中获取一个值(我使用 Angular 4)。所以我尝试在 Express 上写一个函数,但事实是我不知道怎么做,因为我什至无法直接在 mongo.
的命令行中获取值我的模式采用这种格式:
const userSchema = mongoose.Schema({
username: {
type: String,
required: true,
unique: true
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
item: {
item1: {
type: Number,
default: 0
},
item2: {
type: Number,
default: 0
},
item3: {
type: Number,
default: 0
}
}
});
想法是每个用户都有一个库存,其中包含每个项目的一定数量,我的目标是在使用项目名称发出请求时获取这个特定数量。
但我能做的最好的是 db.users.find({}, {item:1});我用它得到了带有它们的值的整个项目列表,我尝试的所有其他事情都让我出错。所以也许我的架构不正确?
所以我的问题是: 我知道我目前无法直接从 mongo 获取值,如何才能通过将项目名称作为参数传递给 Express 来获取项目值?
知道答案也会帮助我知道以后如何更改此值。
感谢阅读!
[编辑] 此主题被标记为与此主题重复: How to query nested objects?
但我已经看到了另一个主题,所以是的,有:
db.users.find({ item : { item1 : "0" }}).count();
我可以得到值,但它对我一点帮助都没有,因为你必须写值才能得到值....但我想在不知道值的情况下进行查询,因为这值会改变。
此外,我需要更多关于 Express 方面的建议。
谢谢。
查询将是这样的:
db.users.find({ username: "someuser" }, { "item.item1": 1, "_id": 0 })
1表示你要获取那个字段,不代表它的值。 _id 通常总是 returned,所以我将它设置为 0 而不是 return 在这种特殊情况下。项目名称作为参数传递;在本例中,它是 item1.
查询会 return 像这样:
{ "item" : [ { "item1" : 123 } ] }
很普通JSON所以很容易提取值。
在 Mongoose 中它会是这样的:
const itemname = 'item1';
User
.findOne(
{ username: 'someuser' },
{ [`item.${itemname}`]: true, _id: false },
(err, result) => {
const response = {};
if (err) {
response.status = HttpStatus.INTERNAL_SERVER_ERROR;
response.message = err;
} else {
response.status = HttpStatus.OK;
response.message = result.item[itemname];
}
return res.status(response.status).json(response.message);
}
);
没有正确的错误处理。如果用户不存在,没有项目字段等,代码片段将失败。