Node、Express、MongoDB:使用对象数组创建模式?
Node, Express, MongoDB: Creating a schema with an array of objects?
这是我想要的架构:
{
username: "taimoor",
pairs: [
{
code: "CA",
site: "google.ca"
},
{
code: "US",
site: "google.com"
},
{
code: "GB",
site: "google.co.uk"
}
]
date: 1574880349,
}
这是我当前的架构:
const redirectionSchema = new mongoose.Schema({
username: {
type: String,
required: true,
},
pairs: [
// What do I place here?
],
date: {
type: Date,
required: true,
default: Date.now
}
})
我不知道如何使用 mongoose
继续和实施它。我应该创建另一个名为 Pair
的模式吗?如果是这样:
- 如何确保配对有效?
- 如何以编程方式将
Pair
添加到 "pairs"?
感谢您抽空,这是我第一次使用 NoSQL。
型号
const redirectionSchema = new mongoose.Schema({
username: {
type: String,
required: true,
},
pairs: [
{
_id: false,
code: { type: String },
site: { type: String }
}
],
date: {
type: Date,
required: true,
default: Date.now
}
})
const Redirection = mongoose.model('Redirection', redirectionSchema);
使用
const redirection = new Redirection({
username: "taimoor",
pairs: [
{
code: "CA",
site: "google.ca"
},
{
code: "US",
site: "google.com"
},
{
code: "GB",
site: "google.co.uk"
}
],
date: new Date(1574880349),
})
redirection.save();
示例数据库输出
{
"_id": {
"$oid": "5ddecc4c6dd3760c40ff354b"
},
"username": "taimoor",
"pairs": [
{
"code": "CA",
"site": "google.ca"
},
{
"code": "US",
"site": "google.com"
},
{
"code": "GB",
"site": "google.co.uk"
}
],
"date": {
"$date": "1970-01-19T05:28:00.349Z"
},
"__v": 0
}
您需要有一个配对的内部架构。这样您就可以对这些对应用必需的或其他验证。
const mongoose = require("mongoose");
const redirectionSchema = new mongoose.Schema({
username: {
type: String,
required: true
},
pairs: [
new mongoose.Schema({
code: {
type: String,
required: true
},
site: {
type: String,
required: true
}
})
],
date: {
type: Date,
required: true,
default: Date.now
}
});
module.exports = mongoose.model("Redirect", redirectionSchema);
并且您可以使用以下 App.js 创建包含用户名和对的文档,或将另一对添加到现有文档。
App.js
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const Redirect = require("./models/redirect");
const url = "mongodb://localhost:27017/redirectDB";
const port = process.env.PORT || 3000;
app.use(express.json());
mongoose
.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
app.listen(port, () => {
console.log(`App running on port ${port}...`);
});
})
.catch(error => console.log(error));
app.post("/redirect", async (req, res) => {
try {
const result = await Redirect.create(req.body);
res.send(result);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
app.post("/redirect/:id/pair", async (req, res) => {
const { code, site } = req.body;
try {
const result = await Redirect.findByIdAndUpdate(
req.params.id,
{
$push: {
pairs: { code, site }
}
},
{ new: true }
);
res.send(result);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
要创建用户名和配对,请像这样向 url http://localhost:3000/redirect
发送 post 请求:
{
"username": "taimoor",
"pairs": [
{
"code": "CA",
"site": "google.ca"
},
{
"code": "US",
"site": "google.com"
}
]
}
响应将是这样的:
{
"_id": "5ddecfcb3cd5c035b4c31d95",
"username": "taimoor",
"pairs": [
{
"_id": "5ddecfcb3cd5c035b4c31d97",
"code": "CA",
"site": "google.ca"
},
{
"_id": "5ddecfcb3cd5c035b4c31d96",
"code": "US",
"site": "google.com"
}
],
"date": "2019-11-27T19:34:35.781Z",
"__v": 0
}
稍后我们可以使用对此 url http://localhost:3000/redirect/5ddecfcb3cd5c035b4c31d95/pair
的 post 请求向该文档添加新对。 url中的id是我们之前创建的id,在response中得到的。
要求:
{
"code": "GB",
"site": "google.co.uk"
}
响应:
{
"_id": "5ddecfcb3cd5c035b4c31d95",
"username": "taimoor",
"pairs": [
{
"_id": "5ddecfcb3cd5c035b4c31d97",
"code": "CA",
"site": "google.ca"
},
{
"_id": "5ddecfcb3cd5c035b4c31d96",
"code": "US",
"site": "google.com"
},
{
"_id": "5dded01693be502168a0f794",
"code": "GB",
"site": "google.co.uk"
}
],
"date": "2019-11-27T19:34:35.781Z",
"__v": 0
}
这是我想要的架构:
{
username: "taimoor",
pairs: [
{
code: "CA",
site: "google.ca"
},
{
code: "US",
site: "google.com"
},
{
code: "GB",
site: "google.co.uk"
}
]
date: 1574880349,
}
这是我当前的架构:
const redirectionSchema = new mongoose.Schema({
username: {
type: String,
required: true,
},
pairs: [
// What do I place here?
],
date: {
type: Date,
required: true,
default: Date.now
}
})
我不知道如何使用 mongoose
继续和实施它。我应该创建另一个名为 Pair
的模式吗?如果是这样:
- 如何确保配对有效?
- 如何以编程方式将
Pair
添加到 "pairs"?
感谢您抽空,这是我第一次使用 NoSQL。
型号
const redirectionSchema = new mongoose.Schema({
username: {
type: String,
required: true,
},
pairs: [
{
_id: false,
code: { type: String },
site: { type: String }
}
],
date: {
type: Date,
required: true,
default: Date.now
}
})
const Redirection = mongoose.model('Redirection', redirectionSchema);
使用
const redirection = new Redirection({
username: "taimoor",
pairs: [
{
code: "CA",
site: "google.ca"
},
{
code: "US",
site: "google.com"
},
{
code: "GB",
site: "google.co.uk"
}
],
date: new Date(1574880349),
})
redirection.save();
示例数据库输出
{
"_id": {
"$oid": "5ddecc4c6dd3760c40ff354b"
},
"username": "taimoor",
"pairs": [
{
"code": "CA",
"site": "google.ca"
},
{
"code": "US",
"site": "google.com"
},
{
"code": "GB",
"site": "google.co.uk"
}
],
"date": {
"$date": "1970-01-19T05:28:00.349Z"
},
"__v": 0
}
您需要有一个配对的内部架构。这样您就可以对这些对应用必需的或其他验证。
const mongoose = require("mongoose");
const redirectionSchema = new mongoose.Schema({
username: {
type: String,
required: true
},
pairs: [
new mongoose.Schema({
code: {
type: String,
required: true
},
site: {
type: String,
required: true
}
})
],
date: {
type: Date,
required: true,
default: Date.now
}
});
module.exports = mongoose.model("Redirect", redirectionSchema);
并且您可以使用以下 App.js 创建包含用户名和对的文档,或将另一对添加到现有文档。
App.js
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const Redirect = require("./models/redirect");
const url = "mongodb://localhost:27017/redirectDB";
const port = process.env.PORT || 3000;
app.use(express.json());
mongoose
.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
app.listen(port, () => {
console.log(`App running on port ${port}...`);
});
})
.catch(error => console.log(error));
app.post("/redirect", async (req, res) => {
try {
const result = await Redirect.create(req.body);
res.send(result);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
app.post("/redirect/:id/pair", async (req, res) => {
const { code, site } = req.body;
try {
const result = await Redirect.findByIdAndUpdate(
req.params.id,
{
$push: {
pairs: { code, site }
}
},
{ new: true }
);
res.send(result);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
要创建用户名和配对,请像这样向 url http://localhost:3000/redirect
发送 post 请求:
{
"username": "taimoor",
"pairs": [
{
"code": "CA",
"site": "google.ca"
},
{
"code": "US",
"site": "google.com"
}
]
}
响应将是这样的:
{
"_id": "5ddecfcb3cd5c035b4c31d95",
"username": "taimoor",
"pairs": [
{
"_id": "5ddecfcb3cd5c035b4c31d97",
"code": "CA",
"site": "google.ca"
},
{
"_id": "5ddecfcb3cd5c035b4c31d96",
"code": "US",
"site": "google.com"
}
],
"date": "2019-11-27T19:34:35.781Z",
"__v": 0
}
稍后我们可以使用对此 url http://localhost:3000/redirect/5ddecfcb3cd5c035b4c31d95/pair
的 post 请求向该文档添加新对。 url中的id是我们之前创建的id,在response中得到的。
要求:
{
"code": "GB",
"site": "google.co.uk"
}
响应:
{
"_id": "5ddecfcb3cd5c035b4c31d95",
"username": "taimoor",
"pairs": [
{
"_id": "5ddecfcb3cd5c035b4c31d97",
"code": "CA",
"site": "google.ca"
},
{
"_id": "5ddecfcb3cd5c035b4c31d96",
"code": "US",
"site": "google.com"
},
{
"_id": "5dded01693be502168a0f794",
"code": "GB",
"site": "google.co.uk"
}
],
"date": "2019-11-27T19:34:35.781Z",
"__v": 0
}