GVKun编程网logo

如何在 mongoDB 中用一个请求更新 2 个集合?(mongodb更新多条数据)

27

在这里,我们将给大家分享关于如何在mongoDB中用一个请求更新2个集合?的知识,让您更了解mongodb更新多条数据的本质,同时也会涉及到如何更有效地c#–为什么我的类将一个集合保存到数据库而不保存

在这里,我们将给大家分享关于如何在 mongoDB 中用一个请求更新 2 个集合?的知识,让您更了解mongodb更新多条数据的本质,同时也会涉及到如何更有效地c# – 为什么我的类将一个集合保存到数据库而不保存另一个集合?、java mongodb 合并两个集合的方法、javascript – 如何使用Node.js将对象添加到MongoDB中另一个集合中的集合、javascript – 如何在MongoDB中使用该集合?的内容。

本文目录一览:

如何在 mongoDB 中用一个请求更新 2 个集合?(mongodb更新多条数据)

如何在 mongoDB 中用一个请求更新 2 个集合?(mongodb更新多条数据)

一旦用户记录更新,它就会执行您在回调中定义的操作,并且数据记录被排除在外,以防止在用户的回调中更新数据记录并尝试使用 updateOne() 代替findOneAndUpdate() :

User.updateOne(
  { _id: userId },{ adoptedPet: petId,petId: false,adoptionRequest: false },function (err,result) {
    if(err) res.send(err)
    Data.updateOne(
      { _id: petId },{ adopted: true },result) {
        if(err)
        res.send(err)
        else{
          // Redirect where you want to  go
        }
      }
    );
  }
);

c# – 为什么我的类将一个集合保存到数据库而不保存另一个集合?

c# – 为什么我的类将一个集合保存到数据库而不保存另一个集合?

这真让我抓狂.我可以将其中一个集合保存在一个类中,但不能保存在另一个类中.

我有一个名为Category的类

public Category()
{
    Items = new List<Item>();
    Prices = new List<Price>();
}

这两种方法几乎完全相同.构造函数分别设置一个名为Category的属性及其Name和Price.

public virtual Item AddItem(string name)
{
    var item = new Item(this,name);
    Items.Add(item);
    return item;
}

public virtual Price AddPrice(decimal price)
{
    var price = new Price(this,price);
    Prices.Add(price);
    return price;
}

映射

public class CategoryMap : ClassMap<Category>
{
    public CategoryMap()
    {
       // Other properties

       HasMany(x=>x.Items).Cascade.AllDeleteOrphan();
       HasMany(x=>x.Prices).Cascade.AllDeleteOrphan();
    }
}

如您所见,两个集合的映射方式完全相同.

Price和Item的映射都具有相同的映射

References(x=>x.Category);

据我所知,几乎关于这两者的一切都是相同的.这是问题所在

category.AddItem(someName);
session.Save(category);    // Works

category.AddPrice(somePrice);
session.Save(category);    // Doesn't work

它们位于我用来填充测试数据库的文件中.保存项目工作正常.保存价格没有.类和映射是相同的.我无法弄清楚.

映射应该可以正常工作,因为调用构造函数直接工作正常

session.Save(new Price(category,1));

那么为什么Category保存一个集合而不另一个?我运行了探查器,该类甚至没有尝试保存Price集合.

更新:

正如Gabe在评论中指出的那样,如果我交换调用以便在Item之前调用Price,则Price进入数据库而Item不进入.

如果我在每次收集更新后调用session.Flush(),它都可以正常工作.我应该这样做,还是有办法修复我的映射,以便它的工作原理?

解决方法

尝试交换调用的顺序(首先添加价格,然后添加项目)以查看价格映射是否确实存在问题,或者问题是第二次调用失败.

关于flush – 大多数情况下你不需要显式调用flush,这是nHibernate在需要时(details here)在后台执行的操作.刷新模式不是映射问题(它是您可以设置的会话属性,但通常您不必这样做).

如果要在事务中包装代码,则不需要刷新.如果你不是,你应该是,这可能是你的问题.

using (var tx = Session.BeginTransaction()) {

    category.AddItem(someName);
    category.AddPrice(somePrice);
    session.Save(category);

    tx.Commit();
}

更新:我想我知道你的问题是什么.鉴于您的代码,看起来您正在创建一个新的类别对象并用数据填充它.在第一个Save()上,nHibernate执行自动刷新,因为它不能将category_id分配给子集合,直到它从db获取一个.但第二次,类别有一个id,所以会话不需要立即刷新.当不需要时,nHibernate对数据库不熟悉.正如我上面提到的,解决方案是始终使用事务来指定何时完成您的工作.

java mongodb 合并两个集合的方法

java mongodb 合并两个集合的方法

如题,在java 中如何操作mongodb  合并两个集合?方便请告知,谢谢!

javascript – 如何使用Node.js将对象添加到MongoDB中另一个集合中的集合

javascript – 如何使用Node.js将对象添加到MongoDB中另一个集合中的集合

我知道如何使用Node.js在MongoDB中将对象添加到集合中,例如:
router.post('/addProduct',function (req,res) {
    Partner.findByIdAndUpdate({ _id: req.body.partnerId },{ $push: { "products": { name: req.body.dataProduct.name } } },{ safe: true },function (err,response) {
        if (err) throw err;
        res.json(response);
    });
});

但如果产品会是另一张桌子怎么办?我怎样才能简单地在那里添加对象?

让我们说这是我的架构:

var partnerSchema = new mongoose.Schema({
    name: String,products: [
        {
            name: String,campaignList: [
                {
                    name: String,type: String,startDate: Date,endDate: Date,paymentMethod: String,partnerPayout: Number,ourPayout: Number
                }
            ]
        }]
});

每个合作伙伴和产品中的ID都是默认值._id例如. partner._id和product._id.这就是为什么不在上面的架构中.然而我将它们从FrontEnd发送到BackEnd作为req.parameter – 通常是我想说的肯定:)

解决方法

你最好的选择是定义Schema&单独为广告系列建模,并使用_id通过引用将其添加到合作伙伴
var partnerSchema = new mongoose.Schema({
    name: String,campaignList: [
                { type : mongoose.Schema.Types.ObjectId,ref : 'campaignModel' }
            ]
        }]
});
var campaignSchema = new mongoose.Schema({
  name: String,ourPayout: Number
});
var campaignModel = mongoose.model('campaignModel',campaignSchema);
var partnerModel = mongoose.model('partnerSchema',partnerSchema);

一个好的做法是查找您尝试嵌套半复杂数据的时间,或者具有两个或三个以上键的对象,并将它们提取到自己的集合中.它不仅可以更轻松地搜索这些文档,还可以更轻松地将它们与其他对象结合使用.

一定要在查询期间调用.populate(),以便MongoDB知道嵌套来自其他集合的文档,否则,你将只有一个ObjectId数组.

javascript – 如何在MongoDB中使用该集合?

javascript – 如何在MongoDB中使用该集合?

我们在Node.JS中有以下查询
mongo.connect('mongodb://XXX:XXX@ds054XXX.mlab.com:54289/XXXdb',function (err,db) {
    var collection = db.collection('chatmessages')
    var stream = collection.find().sort({ _id: -1 }).limit(20).stream();
    stream.on('data',function (chat) { 
        socket.emit('user message',chat.content,chat.dateCreated); 
    });
});

如您所见,查询是输入的最后20条记录的集合.但是从这个结果我们想再次使用_id中的1,所以在列表中我们将使用ID 55 – 75(例如).所以最后一个总是在底部.

我们如何再次实现这一目标?

解决方法

您需要使用聚合框架.
mongo.connect('mongodb://XXX:XXX@ds054XXX.mlab.com:54289/XXXdb',db) {
    var collection = db.collection('chatmessages')
    var stream = collection.aggregate([
        { "$sort": { "_id": -1}},{ "$limit": 20 },{ "$sort": { "_id": 1 }}
    ]);
    stream.on('data',chat.dateCreated); 
    });
});

我们今天的关于如何在 mongoDB 中用一个请求更新 2 个集合?mongodb更新多条数据的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 为什么我的类将一个集合保存到数据库而不保存另一个集合?、java mongodb 合并两个集合的方法、javascript – 如何使用Node.js将对象添加到MongoDB中另一个集合中的集合、javascript – 如何在MongoDB中使用该集合?的相关信息,可以在本站进行搜索。

本文标签: