web-dev-qa-db-fra.com

Comment insérer un doc dans mongodb en utilisant mangouste et obtenir l'id généré?

J'utilise mangouste pour faire fonctionner mongodb. Maintenant, pour les tests, je veux insérer des données dans mongodb par connexion native.

Mais la question est de savoir comment obtenir l'ID généré après l'insertion?

J'ai essayé:

var mongoose = require('mongoose');

mongoose.connect('mongo://localhost/shuzu_test');

var conn = mongoose.connection;

var user = {
    a: 'abc'
};

conn.collection('aaa').insert(user);

console.log('User:');
console.log(user);

Mais il imprime:

{ a: 'abc' }

Il n'y a pas _id champ.

30
Freewind

Vous pouvez générer _id vous-même et envoyez-le à la base de données.

var ObjectID = require('mongodb').ObjectID;

var user = {
  a: 'abc',
  _id: new ObjectID()
};

conn.collection('aaa').insert(user);

C'est l'une de mes fonctionnalités préférées de MongoDB. Si vous devez créer un certain nombre d'objets liés les uns aux autres, vous n'avez pas besoin de faire de nombreux allers-retours entre l'application et la base de données. Vous pouvez générer tous les identifiants dans l'application, puis simplement insérer tout.

40

Si vous utilisez .save, vous récupérerez le _id dans la fonction de rappel.

var user = new User({
  a: 'abc'
});

user.save(function (err, results) {
  console.log(results._id);
});
7
martinedwards

Si vous aimez utiliser Promises:

const collection = conn.collection('aaa');
const instance = new collection({ a: 'abc' });
instance.save()
    .then(result => {
        console.log(result.id);  // this will be the new created ObjectId
    })
    .catch(...)

Ou si vous utilisez Node.js> = 7.6.0:

const collection = conn.collection('aaa');
const instance = new collection({ a: 'abc' });
try {
    const result = await instance.save();
    console.log(result.id);  // this will be the new created ObjectId
} catch(...)
2
Kleber

Vous pouvez utiliser la méthode Update avec l'option upsert: true

aaa.update({
    a : 'abc'
}, {
    a : 'abc'
}, {
    upsert: true
});
1
Rifaideen