我正在开发一个桌子规划器应用程序,可以将客人分配到桌子上。表模型具有以下架构:
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const tableSchema = new mongoose.Schema({
name: {
type: String,
required: 'Please provide the name of the table',
trim: true,
},
capacity: {
type: Number,
required: 'Please provide the capacity of the table',
},
guests: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Guest',
}],
});
module.exports = mongoose.model('Table', tableSchema);
Run Code Online (Sandbox Code Playgroud)
客人可以在应用程序中(使用 React DND)拖放到“表”React 组件。当被放到一个表上时,一个 Axios POST 请求被发送到一个 Node.js 方法来更新数据库并将来宾的对象 ID 添加到表模型中的一个数组中:
exports.updateTableGuests = async (req, res) => {
console.log(req.body.guestId);
await Table.findOneAndUpdate(
{ name: req.body.tablename },
{ $push: …Run Code Online (Sandbox Code Playgroud) 我正在与lookupMongoDB中新的(可爱的)运算符进行斗争。我有3个收藏:
艺术家
{
"_id" : ObjectId("5b0d2b2c7ac4792df69a9942"),
"name" : "Dream Theater",
"started_in" : NumberInt(1985),
"active" : true,
"country" : "US",
"current_members" : [
ObjectId("5b0d2a7c7ac4792df69a9941")
],
"previous_members" : [
ObjectId("5b0d2bf57ac4792df69a9954")
],
"albums" : [
ObjectId("5b0d16ee7ac4792df69a9924"),
ObjectId("5b0d47667ac4792df69a9994")
],
"genres" : [
"prog metal",
"prog rock"
]
}
Run Code Online (Sandbox Code Playgroud)
专辑
{
"_id" : ObjectId("5b0d16ee7ac4792df69a9924"),
"title" : "Images and words",
"released" : ISODate("1992-07-07T00:00:00.000+0000"),
"songs" : [
ObjectId("5b0d15ab7ac4792df69a9916"),
ObjectId("5b0d15ee7ac4792df69a991e"),
ObjectId("5b0d2db37ac4792df69a995d"),
ObjectId("5b0d2dbe7ac4792df69a995e"),
ObjectId("5b0d2dcb7ac4792df69a995f"),
ObjectId("5b0d2dd87ac4792df69a9960"),
ObjectId("5b0d2de27ac4792df69a9961"),
ObjectId("5b0d2dec7ac4792df69a9962")
],
"type" : "LP"
}
{
"title" : "Awake",
"released" …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的文件:
{
"_id": {
"$oid": "5b1586ccf0c56353e89d330b"
},
"address": {
"street": "123 Street",
"address2": "Address 2",
"city": "Some City",
"state": "MI",
"zip": "12345"
},
"subs": [
{
"invoices": [
{
"address": {
"street": "3061 Pine Ave SW",
"city": "Grandville",
"state": "AK",
"zip": "49418"
},
"lineItem": [
{
"images": [
{
"_id": {
"$oid": "5b1fca54e6ee1d80c463612d"
},
"name": "1528810066348_RSA Logo.jpeg",
"url": "https....",
"uploadDate": {
"$date": "2018-06-12T13:27:46.931Z"
},
"size": 91819
}
],
"_id": {
"$oid": "5b1fca54e6ee1d80c463612c"
},
"desc": "2",
"amt": 2
}
],
"_id": …Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我,我做错了什么?
db文件结构:
{
"_id" : "module_settings",
"moduleChildren" : [
{
"_id" : "module_settings_general",
"name" : "General",
},
{
"_id" : "module_settings_users",
"name" : "Users",
},
{
"_id" : "module_settings_emails",
"name" : "Emails",
}
],
“permissions” : [
"module_settings_general",
"module_settings_emails"
]
}
Run Code Online (Sandbox Code Playgroud)
管道阶段:
{ $project: {
filteredChildren: {
$filter: {
input: "$moduleChildren",
as: "moduleChild",
cond: { $in : ["$$moduleChild._id", "$permissions"] }
}
},
}}
Run Code Online (Sandbox Code Playgroud)
我需要过滤"moduleChildren"数组以仅显示哪些ID在"权限"数组中.我试过"$$ ROOT.permissions"和"$$ CURRENT.permissions",但没有一个能正常工作.我总是得到一个错误,$ in缺少数组作为参数.当我像这样硬编码数组时它起作用:cond: { $in : ["$$moduleChild._id", [“module_settings_general", "module_settings_emails”]] }所以看起来问题在于传递数组.谢谢你的任何建议!
我有这个文件:
{
"_id" : ObjectId("5b673f525ef92ec6ef16504e"),
"events" : [
{
"name" : "Winner",
"map" : 0,
"something" : []
},
{
"name" : "Winner",
"map" : 2,
"something" : []
},
{
"name" : "DifferentName",
"map" : 2,
"something" : []
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我运行以下更新:
db.getCollection('test').updateOne({
"_id": ObjectId("5b673f525ef92ec6ef16504e"),
"events.name": "Winner",
"events.map": 2
},
{$push: {
"events.$.something": {
something: "test",
}
}
})
Run Code Online (Sandbox Code Playgroud)
我得到了不好的结果:
{
"_id" : ObjectId("5b673f525ef92ec6ef16504e"),
"events" : [
{
"name" : "Winner",
"map" : 0,
"something" : [
{ …Run Code Online (Sandbox Code Playgroud) 您好,我想通过查询排除一些字段。我正在使用 nodejs
public async getDoc() {
return new Promise((resolve, reject) => {
this.database.collection('users').find({email: "value3"}, {password: 0}).toArray((err, result) => {
if(err) {
reject(err)
}
resolve(result);
});
})
}
Run Code Online (Sandbox Code Playgroud)
但在结果集中我不断收到密码字段..
我有两个集合,如清单和任务。两个模式如下所示
清单架构将如下所示
{
"_id": "5b7d0f77e231b6b530b0ee5a",
"audit_checklist_type": "Weekly"
},
{
"_id": "5b7d3f33e7a57f38084efb09",
"audit_checklist_type": "Daily"
}
Run Code Online (Sandbox Code Playgroud)
任务架构如下所示
{
"_id": "5b7d65daf74be318e8378cf9",
"checklist_id": "5b7d3f33e7a57f38084efb09"
},
{
"_id": "5b7d662df74be318e8378cfb",
"checklist_id": "5b7d3f33e7a57f38084efb09"
}
Run Code Online (Sandbox Code Playgroud)
我的查询是
AuditChecklist.aggregate([
{ $match: {
$and: [
audit_checklist_type : "Daily"
]
} },
{
$lookup: {
from: 'AuditTask',
localField: '_id',
foreignField: 'checklist_id',
as: 'TaskData'
}
},
]).exec();
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得类似的输出
{
"_id": "5b7d3f33e7a57f38084efb09",
TaskData": [
{
"_id": "5b7d65daf74be318e8378cf9",
"checklist_id": "5b7d3f33e7a57f38084efb09"
},
{
"_id": "5b7d662df74be318e8378cfb",
"checklist_id": "5b7d3f33e7a57f38084efb09"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但对我来说,由此产生的 TaskData 输出是空的。任何帮助是极大的赞赏。提前致谢!
我有一个频道集合
{
channel: "Xamper", //unique
subscribers: [
ObjectId("5a934e000102030405000000"),
ObjectId("5a934e000102030405000001"),
ObjectId("5a934e000102030405000002")
]
}
Run Code Online (Sandbox Code Playgroud)
和一个 用户集合
{
_id: ObjectId("5a934e000102030405000000"),
name: "Bradman"
},
{
_id: ObjectId("5a934e000102030405000001"),
name: "Hartin"
},
{
_id: ObjectId("5a934e000102030405000002"),
name: "Migra"
},
{
_id: ObjectId("5a934e000102030405000004"),
name: "Polycor"
}
Run Code Online (Sandbox Code Playgroud)
现在我需要查找频道名称"Xamper"并计算不在subscribers数组中的用户
所以输出将是
{
channel: "Xamper",
unSubscribers: 1
}
Run Code Online (Sandbox Code Playgroud)
类似于SQL的外排除连接
有没有办法知道猫鼬的upsert选项是否通过 await制作了一个新文档?基本上我想要做这只是没有回调。
注意:我正在使用 findByIdAndUpdate
我使用 $project 操作来指定包含的字段我有以下代码:
[{
'$lookup': {
'from': 'users',
'localField': 'owner',
'foreignField': 'id'
'as': 'user'
}
}, {
'$project': {
'userName': '$user.username',
'userId': '$user.id'
}
}]
Run Code Online (Sandbox Code Playgroud)
我的结果如下:
[
{
"userName": [
"jscode"
],
"userId": [
"5d1888d60c627764aabd8b1e"
]
}
]
Run Code Online (Sandbox Code Playgroud)
我需要将userId和userName结果从数组转换为字符串, 如下所示:
[
{
"userName": "jscode" ,
"userId": "5d1888d60c627764aabd8b1e"
}
]
Run Code Online (Sandbox Code Playgroud)
谢谢 :)