我想添加一些额外的数据的usermodel像watchedMovies,我有以下模式:
let userSchema = new Schema({
watchedMovies: [{
type: Schema.Types.ObjectId,
ref: 'Movie'
}]
})
Run Code Online (Sandbox Code Playgroud)
和:
let movieSchema = new Schema({
title: String
})
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以向watchedMovies对象添加任何其他字段并将其与ObjectId一起存储?我想添加watchedAt date所以当我填充watchedMovies时,UserModel.find().populate('watchedMovies', 'title').exec(...)我会得到类似的东西:
{
_id: ObjectId(UserId),
watchedMovies: [{
_id: ObjectId(...),
title: 'Some title',
watchedAt: TimeStamp
}]
}
Run Code Online (Sandbox Code Playgroud)
watchedAt属性指定何时(Date对象)引用添加到UserModel
是否有可能与猫鼬,我应该如何更改我的架构?
谢谢
我想深入填充一个可能过于复杂的模型
var ParentSchema = new Schema({
childs: [{type:Schema.ObjectId, ref: 'Child'}],
});
var ChildSchema = new Schema({
subject: [{
price: {type: Number},
data: {type: Schema.ObjectId, ref: 'Subject'}
}]
})
Run Code Online (Sandbox Code Playgroud)
但是,当我使用常规人口时,它似乎不起作用.我现在安装了deep-populate并使用以下内容:
Parent.deepPopulate('childs.subjects');
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更简单的方法来完成一系列人物.
我正在尝试在 mongoose 和 node 中填充两个表,但收到填充不是函数的错误。
我有搜索,在文档中它似乎和我做的一样。
这里的模型:
var mongoose = require('mongoose');
var dodleSchema = new mongoose.Schema({
name: String,
productorId: {type: mongoose.Schema.ObjectId, ref: "Productor"},
description: String,
ambassadorId: {type: mongoose.Schema.ObjectId, ref: "Ambassador"},
accepted: { type: Boolean, default: false },
read: { type: Boolean, default: false },
deliveryAddress: {
lat: String,
lng: String
},
createdAt: Date,
products: [
{
primaryImage: String,
images: [],
name: String,
max: Number,
min: Number,
step: Number,
stock: Number,
normalPrice: Number,
doodlePrice: Number,
freeShipping: Boolean,
freeShippingFrom: Number
}
], …Run Code Online (Sandbox Code Playgroud) 抱歉,如果已经有人问过这个问题,我的搜索没有出现同样的情况。我有两个架构,如下所示:
var experimentSchema = new mongoose.Schema({
name : 'string'
elements : [{
type : mongoose.Schema.ObjectId,
ref: 'Element'
}],
resources : [{
type : mongoose.Schema.ObjectId,
ref : 'Resource'
}],
})
var elementSchema = new mongoose.Schema({
name : 'string',
component : {
type : mongoose.Schema.ObjectId,
ref : 'Component'
}
})
Run Code Online (Sandbox Code Playgroud)
我想执行深度填充,以便当我请求实验时,我得到一个带有 和 数组的对象,elements并且resources对于每个元素,该字段component也已填充。
我尝试了一些方法:
Experiment.findOne(query).populate(['resources','elements','elements.component']).exec(...)
Run Code Online (Sandbox Code Playgroud)
没有成功。谁能提供此类操作的正确语法?
提前致谢!
我在Nodejs应用程序中有这个Mongoose模式:
const mongoose = require('mongoose'),
Schema = mongoose.Schema,
sodium = require('sodium').api;
const UserSchema = new Schema({
username: {
type: String,
required: true,
index: { unique: true }
},
salt: {
type: String,
required: false
},
password: {
type: String,
required: true
}
});
UserSchema.methods.comparePassword = function(candidatePassword, targetUser) {
let saltedCandidate = candidatePassword + targetUser.salt;
if (sodium.crypto_pwhash_str_verify(saltedCandidate, targetUser.password)) {
return true;
};
return false;
};
module.exports = mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)
我创建了这个路由文件.
const _ = require('lodash');
const User = require('../models/user.js'); // yes, this …Run Code Online (Sandbox Code Playgroud) 我正在使用一个非常简单的 Node/Mongo/Express 设置,并尝试填充引用的文档。考虑我的“课程”模式,其中包含“周”:
// define the schema for our user model
var courseSchema = mongoose.Schema({
teachers : { type: [String], required: true },
description : { type: String },
previous_course : { type: Schema.Types.ObjectId, ref: 'Course'},
next_course : { type: Schema.Types.ObjectId, ref: 'Course'},
weeks : { type: [Schema.Types.ObjectId], ref: 'Week'},
title : { type: String }
});
// create the model for Course and expose it to our app
module.exports = mongoose.model('Course', courseSchema);
Run Code Online (Sandbox Code Playgroud)
我特别想填充我的几周数组(尽管当我将模式更改为一周时,populate()仍然不起作用)。
这是我一周的计划(一门课程有多个):
var weekSchema = …Run Code Online (Sandbox Code Playgroud) 感谢伟大的框架!
我将 mongoose 与 GraphQL 结合使用并遇到以下问题:
如果我想用 来解析存储在用户的数组“参数”中的 ObjectID populate,在 GraphQL 中我会得到一个空参数数组作为答案的用户。
ArgumentSchema我怀疑定义引用(MongoDB 模式的名称)或填充arguments(用户属性的名称)时出现错误。这是如何正确工作的?
论证模式
export const ArgumentSchema = new mongoose.Schema({
argument: { type: String, required: true },
userId: { type: String, required: true },
username: { type: String, required: true },
});
Run Code Online (Sandbox Code Playgroud)
用户模式
export const UserSchema = new mongoose.Schema({
username: { type: String, required: true },
email: { type: String, required: true },
age: { type: Number, required: true },
arguments: { type: [mongoose.Schema.Types.ObjectId], required: …Run Code Online (Sandbox Code Playgroud) 我知道它的语法及其工作原理,但我无法理解内部工作原理,为什么方法链接一次需要另一种方法,但其他时候不需要?
这段代码工作正常
const cart = await Carts.findById(cartId).populate('product');
Run Code Online (Sandbox Code Playgroud)
但这段代码并没有
let cart = await Carts.findById(cartId);
cart = await cart.populate('product');
Run Code Online (Sandbox Code Playgroud)
为了让它发挥作用,我们使用execPopulate这样的方法。
let cart = await Carts.findById(cartId);
cart = await cart.populate('product').execPopulate();
Run Code Online (Sandbox Code Playgroud)
现在,据我读过 javascript 中的方法链接,代码在没有该execPopulate方法的情况下也应该运行良好。但我似乎无法理解为什么 populate 不适用于现有的猫鼬对象。
我想获取与用户相关的帖子。哪一个更快
查找用户并填充帖子
User.findOne({ _id: id}).populate("posts")
或者直接在帖子模型中搜索
Post.find({ owner: user_id })
根据文档,我有以下架构:
const toolRecordSchema = new mongoose.Schema({
userId: { type: mongoose.Schema.Types.ObjectId },
});
toolRecordSchema.virtual("user", {
ref: "User",
localField: "userId",
foreignField: "_id",
justOne: true,
})
Run Code Online (Sandbox Code Playgroud)
当我填充虚拟时,什么也没有发生:
db.ToolRecord.find().populate("user")
Run Code Online (Sandbox Code Playgroud)
但是,如果我将“ref”添加到userId模式中,然后执行.populate("userId"),它会按预期工作,这意味着问题不在于模型之间的关系,而在于虚拟群体。
有什么想法我做错了什么吗?
如果我添加mongoose.set("debug", true),我可以看到将.populate("user")查询产品添加到猫鼬调试日志中的输出:
users.find({}, { skip: undefined, limit: undefined, perDocumentLimit: undefined, projection: {}})
Run Code Online (Sandbox Code Playgroud)
并添加.populate("userId")(有效的)产品此日志:
users.find({ _id: { '$in': [ new ObjectId("631a1fe960d1f82c7fa51a06") ], [Symbol(mongoose#trustedSymbol)]: true }}, { skip: undefined, limit: undefined, perDocumentLimit: undefined, projection: {}})
Run Code Online (Sandbox Code Playgroud)
这样我们就可以看到问题出在哪里。问题是为什么虚拟人口不起作用?
我正在运行猫鼬6