我正在开发一个搜索功能,其中我必须搜索文档中的多个字段。
我有以下案例:
1)获取field1,field2,field3,field4与字符串(nayyar)匹配的所有文档
2) 获取 field1、field2、field3、field4 与字符串 (nayyar) 匹配且性别应为(输入值)或“N/A”的所有文档。
3) 获取 field1、field2、field3、field4 与字符串 (nayyar) 匹配的所有文档,并且年龄应在ageHigh 和ageLow 之间,并且性别应为(输入值)或“N/A”。
4) 获取 field1、field2、field3、field4 与字符串 (nayyar) 匹配的所有文档,并且年龄应在ageHigh 和ageLow 之间,并且性别应为(输入值)或“N/A”,并且 ArrayField 在“atoz”中。
var Schema = new Schema({
lowAge : {
type: Number,
default: 0
},
highAge : {
type: Number,
default: 0
},
gender : {
type: String,
default: 'N/A'
},
field1 : {
type: String
},
field2 : {
type: String
},
field3 : {
type: String
},
field4 : {
type: String
}, …Run Code Online (Sandbox Code Playgroud) 我有TradeRequest使用以下架构 命名的集合
const TradeRequestSchema = mongoose.Schema({
status: {
type: String,
enum: ["opened", "rejected", "accepted"],
default: "opened"
},
_requester: {
required: true,
type: mongoose.Schema.Types.ObjectId
},
_requestedBook: {
required: true,
type: mongoose.Schema.Types.ObjectId
}
});
Run Code Online (Sandbox Code Playgroud)
我的数据库应该只有一个任何人对一本书的开放请求。
所以我添加了一个唯一索引,如下所示 -
TradeRequestSchema.index({_requester: 1, _requestedBook: 1, status: 1}, {unique: true});
Run Code Online (Sandbox Code Playgroud)
问题是这会阻止一些本应允许的数据输入到数据库中。
例如,它阻止我的数据库包含以下文档,这对于我的用例来说很好 -
{_id: 1, _requester: 12345, _requestedBook: 9871212, status: "opened"}
{_id: 2, _requester: 12345, _requestedBook: 9871212, status: "opened"}
Run Code Online (Sandbox Code Playgroud)
但它也可以防止以下情况对我的用例来说是错误的。
例如,如果我的数据库已有以下文档 -
{_id: 3, _requester: 12345, _requestedBook: 9871212, status: "closed"}
{_id: 4, _requester: 12345, …Run Code Online (Sandbox Code Playgroud) 我有以下架构:
ip: String,
port: Number,
msgboard: [{
date: {
type: Date,
default: Date.now,
expires: 120
},
msg: String
}]
Run Code Online (Sandbox Code Playgroud)
我希望消息在创建 120 秒后自动删除。但上面的删除是整个文档,而不仅仅是 msgboard 中的子文档。我一直在使用 cron 并运行一个函数来做到这一点,但代码看起来太不整洁了。有没有内置的方法?
这是我的模型
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
var userSchema = new Schema({
name: String,
email: String,
provider:String,
role:String
});
export default mongoose.model('user',userSchema);
Run Code Online (Sandbox Code Playgroud)
在我的控制器中
import {UserModel} from './model'
async getUser(req,res){
UserModel.find((err,result)=>{
console.log("Error",err);
})
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
类型错误:无法读取未定义的属性“查找”
我一直在尝试updatemany与猫鼬一起使用。我想使用对象数组更新数据库中的值。
[
{
"variantId": "5e1760fbdfaf28038242d676",
"quantity": 5
},
{
"variantId": "5e17e67b73a34d53160c7252",
"quantity": 13
}
]
Run Code Online (Sandbox Code Playgroud)
我想使用 variantId 作为过滤器。模型架构是:
let variantSchema = new mongoose.Schema({
variantName: String,
stocks: {
type: Number,
min: 0
},
regularPrice: {
type: Number,
required: true
},
salePrice: {
type: Number,
required: true
}
})
Run Code Online (Sandbox Code Playgroud)
我想使用 variantId 过滤模型,然后减少库存。
对于这个非常基本的问题表示歉意,但我有点困惑。我在 Express + Node 服务器中使用 Mongoose 发布到 Mongo,我刚刚意识到这两个模型/模式与它们发布到的 MongoDB 中的集合名称不完全相同。一切正常,API 端点发布到正确的集合,但我不知道如何或为什么。Mongoose 模型/模式和 MongoDB 集合之间有什么联系?
显然,我的 MONGODB_URI 环境变量指向我的数据库,但没有其他对集合的引用,特别是 API 端点应发布到哪个集合,除了模型,它与集合的名称不同。
例如,下面我的Post模型确实将数据(通过 api)发送到posts集合,但我无法弄清楚它如何知道这是正确的集合,这让我很烦恼。
const PostSchema = new Schema({
...
});
const Post = mongoose.model('Post', PostSchema);
module.exports = Post;
Run Code Online (Sandbox Code Playgroud)
作为测试,我将上面的变量完全重命名为完全不相关的东西
const TrevorSchema = new Schema({
...
});
const Trevor = mongoose.model('Trevor', TrevorSchema);
module.exports = Trevor;
Run Code Online (Sandbox Code Playgroud)
并且创建了一个带有复数模型名称“Trevors”的新集合,那么 Mongoose 是否会查找要映射到的模型复数名称?干杯,马特