Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB更新子文档不会影响原始文档,反之亦然_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js MongoDB更新子文档不会影响原始文档,反之亦然

Node.js MongoDB更新子文档不会影响原始文档,反之亦然,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用mongoose,并具有以下模式: var mongoose = require('mongoose'); mongoose.connect(/*...*/) const usersSchema = new Schema({ email: String, name: String }) const ordersSchema = new Schema({ user: usersSchema, // <--- ref to usersSchema

我正在使用mongoose,并具有以下模式:

var mongoose = require('mongoose');
mongoose.connect(/*...*/)

const usersSchema = new Schema({
    email: String,
    name: String
})


const ordersSchema = new Schema({
    user: usersSchema, // <--- ref to usersSchema
    createdOn: Date,
    // ...
})

const UsersModel = mongoose.model('Users', usersSchema );
const OrdersModel = mongoose.model('Orders', ordersSchema );
现在我修改用户文档:

// update original user:
var userDocToModify = await UsersModel.findById(savedUser._id);
userDocToModify.email = "BBB@example.com";
await userDocToModify.save();
断言将在以下行失败:

var orderDoc = await OrdersModel.findById(savedOrder._id);
assert(orderDoc.user.email == userDocToModify.email, 'email not changed in the orderDoc.user.email!');

实际上,您在这里所做的不是引用userSchema。您正在将该模式嵌入orders模式。如果要引用用户,应执行以下操作:

const ordersSchema = new Schema({
    user: {type: mongoose.Schema.Types.ObjectId, ref: 'Users'}
    createdOn: Date,
    // ...
})
在这种情况下,您只需将用户id存储在父文档中。 现在,如果您想获取订单和其中的用户,您可以在mongoose中使用mongoose或$lookup

const ordersSchema = new Schema({
    user: {type: mongoose.Schema.Types.ObjectId, ref: 'Users'}
    createdOn: Date,
    // ...
})